#jquery #file-upload
#jquery #загрузка файла
Вопрос:
Я использую плагин jQuery для FileUploader, я тестирую его, повторяя переменную $ _FILES, но это всегда возвращает пустое значение, и я получаю неудачный ответ для FileUploader. Есть идеи, почему он не отправляет данные изображения?
Спасибо!
Комментарии:
1. Не могли бы вы, пожалуйста, предоставить ссылку на тестовую страницу или полный код (html / js) вашего случая?
Ответ №1:
Большинство серверов блокируют сторонние файлы src, такие какhttp://valums.com/ajax-upload / .. для обхода этого вам нужно добавить эти строки в ваш файл .htacess
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
Ответ №2:
qqFileUPload пытается отправить данные файла, используя байтовый поток, а не обычный POST. PHP помещает только те файлы, которые были опубликованы в массив $ _FILES.
К счастью, qqFileUploader поставляется с классом, который получает специальную загрузку и сохраняет ее в файл для вас: https://github.com/valums/file-uploader/blob/master/server/php.php
Удачи!
PS. Я использовал этот загрузчик с Symfony, который ожидает массив файлов в формате, который PHP обычно предоставляет в массиве $ _FILES. Поэтому мне пришлось сохранить файл на диск и создать поддельную запись массива, которую принимали бы формы symfony. Это было сделано с использованием приведенного ниже кода (и классов, на которые я ссылался выше):
if ($filename = $request->getParameter('qqfile', false)) {
// XMLHttpRequest stream'd upload
$xhrUpload = new qqUploadedFileXhr();
$tmp_name = 'tmp_creative_'.microtime(true);
$tmp_file = sfConfig::get('sf_upload_dir').'/'.$tmp_name;
$xhrUpload->save($tmp_file);
list($width, $height, $type) = getimagesize($tmp_file);
$file = array(
'type' => $type,
'size' => $xhrUpload->getSize(),
'name' => $filename,
'tmp_name' => $tmp_file
);
} elseif (count($_FILES)) {
// Normal file upload
$file = array_shift($_FILES);
} else {
throw new Exception("Did not receive uploaded file.");
}
$form->bind(array(), $file);
if($filename)
{
// If we saved the file manually, php won't consider it a tmp
// file and we need to delete it ourselves.
unlink($tmp_file);
}