Пытаюсь сделать мультизагрузку файлов различных форматов для проекта, использую для этого плагин
plupload. Проблема в том, что он у меня работает только с изображениями и только с обязательным изменением размера их.
Вот даже взял файлы из примера, который идёт вместе с архивом плагина.
Подключаем плагин и библиотеки:
...<br>
<script type="text/javascript" src="http://www.google.com/jsapi"></script><br>
<script type="text/javascript"><br>
google.load("jquery", "1.3");<br>
</script><br>
<link rel="stylesheet" href="css/plupload.queue.css" type="text/css" media="screen" /><br>
<script type="text/javascript" src="../js/gears_init.js"></script><br>
<script type="text/javascript" src="http://bp.yahooapis.com/2.4.21/browserplus-min.js"></script><br>
<script type="text/javascript" src="../js/plupload.full.min.js"></script><br>
<script type="text/javascript" src="../src/javascript/jquery.plupload.queue.js"></script><br>
...<br>
Инициализируем плагин и задаём настройки:
$(function() {<br>
var uploader = new plupload.Uploader({<br>
runtimes : 'gears,browserplus,html5,html4',<br>
browse_button : 'pickfiles',<br>
max_file_size : '10mb',<br>
url : 'upload.php',<br>
resize : {width : 320, height : 240, quality : 90},<br>
filters : [<br>
{title : "Image files", extensions : "jpg,gif,png"},<br>
{title : "Zip files", extensions : "zip"}<br>
]<br>
});<br>
Создаём необходимые контейнеры:
<form id="submit-form" method="post" action="dump.php"><br>
<h1>Custom example</h1><br>
<br>
<p>Shows you how to use the core plupload API.</p><br>
<br>
<div><br>
<div id="filelist">No runtime found.</div><br>
<br /><br>
<a id="pickfiles" href="#">[Select files]</a> <br>
<a id="uploadfiles" href="#">[Upload files]</a><br>
</div><br>
<br>
<input type="submit" /><br>
</form><br>
Файл
upload.php остаётся один в один как идёт с архивом плагина, за исключением того, что изменён адрес папки, куда перемещать загружаемые файлы.
Что в итоге?
Изменение размера изображений мне совсем не нужно. Что мне действительно нужно — аяксовая мультизагрузка (и не только изображений, а большого перечня форматов файлов).
С приведённым кодом у меня нормально работает только загрузка изображений. Файлы любых других форматов на прогресс-баре показывает что загрузились полностью (100%), но в действительности никакого файла не появляется и «успешного ответа» от скрипта загрузки не приходит.
Firebug при этом показывает ошибку, но сам ответ — пустой.
Как это получается — сам не понимаю. Ведь все варианты
upload.php заканчиваются хоть каким-нибудь ответом JSON, а чтобы ничего не пришло в ответ — получается должно истечь время выполнения скрипта, хотя процесс загрузки длится всего несколько секунд (max_execution_time точно в разы больше).
Манипуляции с опцией изменения размера изображения
Если из настроек убрать опцию:
...<br>
resize : {width : 320, height : 240, quality : 90},<br>
...<br>
либо задать её значение =
false, либо передать пустой объект
{} — тогда перестаёт работать даже загрузка изображений, всё начинает происходить точно так же, как со всеми остальными типами файлов (описано выше).
Отладка способом plupload
Поскольку Firebug в моём случае ничего полезного не говорил, внедрил в Javascript отладку, пример которой приводят сами авторы plupload.
Вывод отладочной информации для успешной загрузки файла (возвращаем на место опцию resize, загружаем исключительно изображения) можно посмотреть
тут.
Вывод отладочной информации для неудачной загрузки (прогресс-бар показал 100%, но файл не появился, в ответ ничего не пришло, опцию resize убрали) можно глянуть
здесь.
Технические данные
Если это важно, тестирую на локальной Win-машине, сервер nginx-0.9.4 (без Apache), PHP 5.3.5 как CGI, браузеры Firefox 3.6.15 и Google Chrome 10.0.648.127 beta.
Архив со всеми файлами примера.