Адаптер передачи файлов Zend Http нарушает мой ответ AJAX, почему?

Я работаю в Zend Framework 1, и у меня есть эта функция в контроллере:

public function uploadAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$data = [];

if ($this->getRequest()->isPost()) {
$path = /cronjobs/uploads';

// Clean $path directory OOP way using SPL
$di = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($ri as $file) {
$file->isDir() ? rmdir($file) : unlink($file);
}

$adapter = new Zend_File_Transfer_Adapter_Http();
$adapter->addValidator('Extension', false, ['extension' => 'csv', 'case' => true]);
$adapter->addValidator('MimeType', false, ['extension' => 'text/plain']);

// Check if the uploaded file is valid
$errors[] = $adapter->isValid() === false ? $adapter->getMessages() : '';

$file     = (array) $adapter->getFileInfo()['file'];
$ext      = end(explode('.', $file['name']));
$new_path = $file['tmp_name'];

// Check file size
$checkFileSize = Attachment::checkMaxfileSize($file['size']);
if (!$checkFileSize['accept']) {
echo json_encode($checkFileSize['message']);

return true;
}

$data['file'] = array(
'name'       => $file['name'],
'size'       => $adapter->getFileSize(),
'file_path'  => $new_path,
'file_ext'   => $ext
);

$data['var'] = '';
} else {
$data['error'] = 'Invalid request.';
}

return $this->_helper->json($data);
}

Этот метод называется через AJAX следующим образом:

$('#fileupload').show().fileupload({
url: url,
type: "POST",
cache: false,
dataType: 'json',
done: function (e, data) {
console.log(data.result);
},
error: function (xhr, textStatus, errorThrown) {
console.log(xhr + " " + textStatus + " " + errorThrown);
}
})

По какой-то причине, как только я позвоню $adapter->isValid() в контроллере ответ AJAX прерывается. Я могу сказать, что проблема в том, что, если я прокомментирую этот фрагмент кода, все будет работать нормально.

Это сообщение, которое я получаю в настоящее время:

POST http://localhost/admin/upload net::ERR_EMPTY_RESPONSE
massive_charge_types_file_upload.js:147 [object Object] error

После прочтения всех следующих тем:

У меня нет идей, и я застрял, потому что не могу найти причину поведения.

ОБНОВИТЬ:

Я считаю, что проблема на isValid() метод, который возвращает логическое значение, но по какой-то причине это нарушает мой ответ. Есть идеи?

Может ли кто-нибудь помочь мне с этим?

0

Решение

Кажется, синтаксис вашего валидатора MimeType неправильный:

$adapter->addValidator('MimeType', false, ['extension' => 'text/plain']);

Вероятно, должно быть:

$upload->addValidator('MimeType', false, array('text/plain'));

Как описано:

https://framework.zend.com/manual/1.12/en/zend.file.transfer.validators.html

Поскольку ваш файл не пройдет (невозможный) проверочный тест — я предполагаю, что это то, что потом не дает результатов?

0

Другие решения

После нескольких попыток я заработал, добавив следующее:

if ($adapter->isValid() === false) {
$data['error'][] = $adapter->getMessages();
echo json_encode($data);

return true;
}

Мне нужно использовать сырье json_encode() Функция PHP, если я использую помощник Zend Framework JSON, например: $this->_helper->json($data) ответ не сработал.

Я полагаю, что это ограничение для плагина Jquery, которое не является жестким.

0

По вопросам рекламы [email protected]