Всё как раньше, при попытке загрузить большие файлы браузер виснет, только что проверил в лисички 3.5 и хроме под линухой, оба браузера повисле при нажатии аплоад, а файл грузил не больше, всего 49 метров…
Так что годиться только только для фоток (и то не очень больших), а прочих мелких файликов =(
Использую FancyUpload — отлично загружаются файлы размером до 3 мб (больше не требуется, хотя автор плагина писал что загружал и 2 GB). Правда технически загружаю по одному файлу за одно соединение, а не все файлы за раз (а то непонятно какие лимиты установить на размер входящих данных и на время работы скрипта...)
Подвисаний нет.
Но, сталкивался с конфликтом с антивирусом касперского. Вопрос решился обновлением антивируса до 10 версии и настройкой в нем сайта, на которорый осуществляется аплоад, как доверенного.
к сожалению 90% сторонних плагинов к jquery обвешены не нужным для меня функционалом(так же как и большинство других плагинов, хоть в той же symfony), что негативно сказывается как на размере и скорости работы так и на стабильности, так что для себя разработал следующую схему: разбираюсь как работает плагин, потом переписываю, минимализируя под свои задачи. В итоге, согласен с Wott, килобайты заменяются десятками строк.
Каждый выбирает для себя, что ему важнее — производительность приложения, либо скорость разработки этого приложения. Всё зависит от поставленной задачи. Думаю, в большинстве случаев лишние 50-100 Кб на страницу сайта — это не критично (с учетом быстрорастущей ширины каналов пользователей) в сравнении с экономией времени затраченного на разработку.
применительно конкретно к этому плагину, смотрим коментарии, какие ошибки и какие трудности возникают, я намного быстрее перепишу и переделаю его с нуля, чем буду в этих килобайтах копаться и выискивать баги, которые к тому же возможно индивидуальны :)
если мне память не изменяет, то у флеша есть ограничения по работе с локальными файлами с диска пользователя. так что может оказаться, что предварительный ресайз невозможен без предварительной закачки на сервер. но могу врать :)
Собрался и написал свой аплоадер под google gears, unobtrusive-аналог загрузчика вконтакте, картинки пережимает, превью показывает, файлы загружает, обычную отправку форм эмулирует — не нужно делать никаких изменений на стороне сервера, есть хелперы для интеграции с django-вскими formset'ами.
Пока документация не готова, но мне нравится, что получается. Пока в качестве preview кину сюда ссылку на него, вдруг кому пригодится. Лицензия MIT, так что если кому интересно — используйте, подключайтесь к разработке. Пиар проведу, так сказать, предварительный.
Использую этот загрузчик в ЦМС что пишу на codeigniter.
В самом Uploadify было несколько неприятных глюков, но после последнего апдейта (был в конце лета) почти все хорошо за исключением:
1. Иногда улетает окно выбора файлов если долго искать что выбрать(ФФ+Open Suse 11.1) — возможно проблемы с самим ГТК.
2. Окно выбора файлов не запоминает последнюю директорию, иногда просто не удобно рыскать по попкам (опять же не тестил в вин, в лине возможно проблемы с ГТК).
Одно что не совсем хорошо — в флешке некорректно отображается русский (думаю можно подпилить напильником в флеше)
A function that triggers when all file uploads have completed. There is no default event handler.
Вы, судя по всему, меня немного не правильно поняли — о количестве переданной информации во время передачи, т.е. чтобы был прогресс загрузки. Сейчас у меня получается видеть только финиш загрузки, без каких-либо промежуточных данных.
хм, а прогрессбар у вас не срабатывает? И какая промежуточная информация вам еще нужна?
Как понимаю, помимо прогресс бара вы хотите добавить отображения количества загруженных байт?
Но, сколько уже версий браузеров прошло, но ни Opera, ни Firefox этому не научились.
А сам прогресс загрузки реализовал без использования этого модуля — понял силу jQuery.
Есть бага: при загрузке изображений или файлов некоторых, правда у меня не получается локализировать проблему и хоть как-нибудь понять от чего это зависит, плагин загрузив файл на сервак возвращает ошибку — мол никак, не получилось, ты уж прости. Просто редкие файлы грузит, но по окончанию выдаёт что-то вроде: IO Error — 1.zip — 100%, как итог — файл не загрузился.
Это бага видимо во флеше. Если интернет через прокси, с аутентификацией, то плагин, скорее всего работать не будет.
Пробовал другие плагины — ситуация аналогичная.
Поэтому, необходимо оставлять возможность стандартного аплоада через html.
По плагину: недавно внедрил на свой сайт — интерфейс красивый, но есть глючки в старых версиях плагина. Причем примеры идут со старыми, нерабочими версиями, что вносит путаницу, и нет дебагера, позволяющего понять что происходит. В итоге отлаживал скрипты в swfupload (там есть дебагер), а потом подменил его на uploadify. Так же есть нюанс — скрипт аплоада должен быть в отдельной библиотеке или в отдельном блоке script (об этом написано на форуме плагина, пока нашел в чём дело — голову сломал). Вобщем внедрить сложно, но заставить работать — можно.
Посмотреть плагин в действии можно тут: mp3tter.com
Ещё, помогает понимание того, как эта штука работает. Реально, файлы загружаются не в указанную директорию, а во флешку!111. Через файлгетконтекст какой-то. И только потом, тело файла передается постом — скрипту, указанному в настройках. Соответственно, просто указать максимальный размер файла — недостаточно.
Проверь эти настройки в php.ini:
; Maximum size of POST data that PHP will accept.
post_max_size = 20M
; Whether to allow HTTP file uploads.
file_uploads = On
; Maximum allowed size for uploaded files.
upload_max_filesize = 20M
Для сервера nginx — в секции http также необходимо указать:
keepalive_timeout 0;//!!!
client_max_body_size 20m;//
И разрешить обработку флеша, у меня в конфиге это реализовано так:
if (-f $request_filename) {
expires max;
break;
}
не совсем точно описал:
1. файл загружается во флешку
2. файл сохраняется из флеш в темповую директорию сервера
3. скрипту передается массив $_FILES содержащий имена загруженных файлов
как то так.
вы уже наверное давно локализировали проблему, но для остальных, кто попадет сюда из поиска.
оказывается, у меня проблема была в самом флеше под линукс. он не хотел авторизироваться с помощью http-basic.в винде он спрашивает диалог авторизации, в моей убунте — просто игнорит и выдает ошибку.
А почему вы решили что они на jquery могут что-то сделать? Использовать плагины- это одно, а писать самому с использованием фреймворка -это немного другое, имхо, тут тоже необходимо неплохое знание жабаскрипт. И почему бы не любить фреймворк за удобство и функциональность?
Зачем делать что-то на чистом жабоскрипте? Чистый нужен только тогда, когда надо очень мало написать. По онклику скрыть див.
А если писать что-то серьёзное без фреймворка — это уже велосипед (:
Файл при аплоаде изначально попадает во временную директорию, определенную в настройках php.ini (см. секцию «File Uploads» и в ней upload_tmp_dir)
А оттуда php-командой move_uploaded_file можно его переместить куда требуется.
Столкнулся с некоторыми «багами» при использовании этого плагина:
1. Если на клиентской стороне работает Касперский, то загрузка каждого файла (прогрессбар) сразу показывает 100%. При отключеном касперском — нормально.
2. (хотя тут возможно виноват сервер) Загрузка больших файлов (около 500Мб) доходит до 100% и все, никаких действий от скрипта вы не дождетесь, возникает ощущение, что скрипт ждет json, но не получает и ожидание это может продолжаться вечно!
IO Error — бывает, но не часто…
выше написал как оно работает. Сначала файл загружается во флеш, и только потом сохраняется на сервер. Т.е. в момент, когда градусник показывает 100% — начинается сохранение файла. Просто подождите пока файл сохранится.
Настройте в касперском сайт, на который аплоадите файл, как довернный. Правда такую настройку удалось обнаружить только для KAV 10, в девятом ее не нашел…
(Настройка/Защита/Вэб антивирус/Настройка/Оптимизация проверки/кнопка Выбрать/ добавьте сюда записть типа *yoursite.com*), и все будет работать.
Спасибо, как настроить я знаю, да и проблема с прогрессбаром меня не напрягает, но есть начальство которому не нравится такая визуализация процесса загрузки, вот и думал, мало ли кто то находил решение этой проблемы…
Это все потому, что касперский любые файлы и письма, отправляемые во внешний инет, сразу «закачивает» на себя, говоря приложению, что все в порядке. Дальше сканит и уже после проверки доставляет адресату. Вот потому у браузера и возникает ощущение, что файл загружен: касперский ему так говорит. Установлено опытным путем, могу ошибаться.
Дополнительные параметры можно передавать через контейнер scriptdata, примерно так:
function startUpload()
{
var twitt = 'false';
if (document.getElementById('twitt_it').checked == true) twitt = 'true';
$('#uploadify').uploadifySettings('scriptData',{'tag':$('#tag').val(),'msg':$('#msg').val(),'twitt_it':twitt,'author':'recoilme'});
$('#uploadify').uploadifyUpload();
}
Единственный неприятный момент в использовании флеша для загрузки файлов — необходимость передавать идентификатор сессии в открытом виде.
Т.е. оно, конечно, не сильно смертельно, если речь идёт об админке — куда доступ одного человека разрешён, другое дело когда это сервис, где толпа народу, имеющая право что-то загружать. Вот тогда уже не так всё кучеряво хотя терпимо.
Кстати, если стоит суровый скрипт (у меня в CakePHP всё сурьёзно) — следует ещё и проверку UserAgent отключать — ибо сессия сессией, а агент-то меняется :)
Да действительно очень полезный плагин, но если кто подскажет как его прикрутить к фреймворку, а точнее как должен выглядеть метод контроллера, которому передается массив с файлами. Много мучился привязать его к CI, но ничего не получилось.
Вот как сделав у себя (/system/application/modules/upload/ — тут сам плагин и нужные файлы):
Настройка плагина (думаю спокойно можно вынести в отдельный js, но не пробывал)
idResp=''; // нужно для моего обработчика резалта онАджаксКомплит
$.post('http://<?=$_SERVER['SERVER_NAME']?>/admin/upload/doupload/', 'name='+fileObj.name+'&path='+fileObj.filePath+'&module=<?=$module;?>&id_pos=<?=$id_pos;?>&conf_name=<?=$conf_name?>', // после загрузки делаем запрос на обработчик (ниже будет пример)
function(data){
idResp = ''; // нужно для моего обработчика резалта онАджаксКомплит
$.get('http://<?=$_SERVER['SERVER_NAME']?>/admin/upload/index/'+data+'/', '',
function(data){
$("#gallery_box").fadeIn(250, function() { $("#gallery_box").append(data)}); /* сюда попадают сразу загруженные изображения */
}
);
});
},
Поправьте в примере: в «checkscript», «script» должен быть с большой буквы: checkScript.
Я долго думал, почему же оно у меня не работает :)
А «folder» как-то не понятно рабоает, все равно добавляет путь к скрипту, хотя в доке и написано: For absolute paths prefix the path with either '/' or 'http'.
Вопрос, как в файле настроек поменять скажем локализацию Uploadify, не затрагивая основной плагин (в данном случае jquery.uploadify.v2.1.0.min.js), дабы безболезненно в дальнейшем обновлятся.
Или скажем поменять внешний динамически создаваемых вид элементов аплоадера (тот-же програесс бар, когда одинм css не обойтись)?
А как хэндлить ошибки?
Тоесть, если у меня произошла ошибка на стадии, например, копирования файла из временной директории в директорию назначения — как сообщить об этом в скрипт, отправивший файл?
Там в примере uploadify.php в конце есть строкаи
echo '1';
и
echo 'Invalid file type.';
Но как их ловить — непонятно, onError не вызывается, в onAllComplete тоже errors: 0… куда рыть?
Думаю, стоит об этом сказать, но на текущий момент плагин некорректно работает. Возможно, дело в более новой версии jQuery. Но факт остается фактом. upladifySettings вызывает ошибку. Потратил много времени на изоляцию проблемы, и бросил в пользу SWFUpload.
По крайней мере нет никаких проблем с изоляцией авторизации, подгрузкой и стилизацией аплоадера. Просто нет. И библиотека в целом весяг в 3 раза меньше SWFUpload.
Это не минус. Это обязательное условие. Хотя в принципе, у вас есть возможность самому написать хэндлер загрузки, который будет обрабатывать прогресс загрузки.
JQuery Uploadify — мультизагрузка файлов с использованием флэш