我在'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代码时,我得到了相同的消息,用于我的测试代码(文件不存在),但无论如何上传文件。
如何修复我的前端代码以上传此文件?
您是否将enctype声明添加到窗体?(enctype =“multipart/form-data”) – sulman 2014-09-04 10:40:29
@sulman是的,我已经添加了这个。 – Alan 2014-09-04 10:44:20
艾伦你如何在观察者中解决这个问题? – 2016-03-04 11:29:04