Если вы проверите ответ XHR в отладчике, вы увидите это {"error":"File was not uploaded.","errorcode":666}
Эта ошибка происходит от Varien_File_Uploader::__construct()
в lib/Varien/File/Uploader.php
Вот важные части
<?php
class Varien_File_Uploader
{
/**
* Uploaded file handle (copy of $_FILES[] element)
*
* @var array
* @access protected
*/
protected $_file;
const TMP_NAME_EMPTY = 666;
function __construct($fileId)
{
$this->_setUploadFileId($fileId);
if(!file_exists($this->_file['tmp_name'])) {
$code = empty($this->_file['tmp_name']) ? self::TMP_NAME_EMPTY : 0;
throw new Exception('File was not uploaded.', $code);
} else {
$this->_fileExists = true;
}
}
}
Оглядываясь назад, вы видите, что это называется
$uploader = new Mage_Core_Model_File_Uploader('image');
Это расширение из класса Varien, поэтому Varien_File_Uploader::_setUploadFileId($fileId)
создаст массив $this->_file
на основе ключа image
, в данном случае.
Итак, теперь проблема в почему $_FILES['image']['tmp_name']
пусто?
Я проверил поле 'error'
, временно изменив исключение на
throw new Exception('File was not uploaded. ' . $this->_file['error'], $code);
Я получил 7
, то есть Failed to write file to disk.
, что означает, что проблема связана с разрешениями. Сделайте phpinfo()
, чтобы проверить, где установлен ваш upload_tmp_dir
, и убедитесь, что он доступен для записи.
В моем случае мне не хватило места в каталоге /tmp
.