2014-09-04 85 views
1

我在'customer_save_before'事件的自定义模块中包含了观察者代码。当客户在Magento front,account management area中提交他的详细信息时,它就会启动。它执行一个脚本,该脚本应拦截$ _FILES [...]阵列并使用Varien_File_Uploader将其保存在数据库中。

我加了一个新的领域... /模板/客户/表格/ edit.phtml

<input type="file" name="logo" id="logo" title="<?php echo $this->__('Logo') ?>" class="input-file" /> 

这是我的Observer.php代码,在 'customer_save_before' extcutes:

class Walder_Logoupload_Model_Observer extends Mage_Core_Model_Abstract { 

public function customer_save_before($observer) { 

    // Test code START 

     echo "<pre>"; print_r($_FILES); 

     $tempexists = file_exists($_FILES['logo']['tmp_name'])?'exists':'doesnt exist'; 
     echo "logo.tmp_name file: ".$tempexists; 
     exit; 

    // Test code END 

     if(isset($_FILES['logo']['name'])) { 
      try { 
      $uploader = new Varien_File_Uploader('logo'); 
      $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png')); 
      $uploader->setAllowRenameFiles(false); 
      $uploader->setFilesDispersion(false); 

      $path  = Mage::getBaseDir('media') . DS .'catalog'.DS.'customer'.DS.'logo'; 
      $newName = time() . $_FILES['logo']['name']; 
      $uploader->save($path, $newName); 
      $customer->setLogo($newName); 
      }catch(Exception $e) { 
       echo "Exception: ".$e; exit; 
      } 
     } 
} 
} 

文件上传后,启用测试代码后,我得到一个包含文件信息以及'tmp_name'路径的数组和一条消息,表明临时文件不存在:

[logo] => Array 
    (
     [name] => sample-logo.png 
     [type] => image/png 
     [tmp_name] => /home/www/mag59212/tmp/phpbCoax5 
     [error] => 0 
     [size] => 107564 
    ) 

logo.tmp_name file: doesnt exist 

带有测试代码注释掉我得到这个异常错误消息:

exception 'Exception' with message 'File was not uploaded.' 
in /home/www/mag59212/html/magento-de/lib/Varien/File/Uploader.php:153 

这意味着同样的,$ _FILES [“不对tmp_name”]文件不存在。结果该文件不保存在服务器上。

当我在后端运行这个Observer代码时,我得到了相同的消息,用于我的测试代码(文件不存在),但无论如何上传文件。

如何修复我的前端代码以上传此文件?

+0

您是否将enctype声明添加到窗体?(enctype =“multipart/form-data”) – sulman 2014-09-04 10:40:29

+0

@sulman是的,我已经添加了这个。 – Alan 2014-09-04 10:44:20

+0

艾伦你如何在观察者中解决这个问题? – 2016-03-04 11:29:04

回答

0

我有类似的问题。你检查了系统日志吗?

Magento的文件夹/无功/日志/ System.log的

对于我来说,说:

警告:file_exists()[function.file-存在]:实际上open_basedir的限制。文件(/ var/tmp中/ phpSJjFIv)是不是在允许的路径(S)内:(...)/httpdocs/lib/Varien/File/Uploader.php上线150

中查找PHP设置在php.ini或phpinfo()中。搜索“open_basedir”和“upload_tmp_dir”。如果设置了open_basedir限制,并且upload_tmp_dir不在允许的目录中,则可能引发此类错误。

0

在我的最终问题是在文件: 法师/客户/控制器/ AccountController.php在代码:

$customerForm->compactData($customerData); 

在$ customerData我的文件自定义属性也接收时compactData函数调用它去掉了文件。 它包括由于属性创建以下行中设置文件:

$used_in_forms[]="customer_account_create"; 

当我删除从自定义属性设置线上面的一行就解决该问题。 希望将有助于有类似问题的人,