jQuery

индекс
283,92

JQuery Uploadify — мультизагрузка файлов с использованием флэш

Тема загрузки файлов без перезагрузки страницы поднималась уже неоднократно. Даже я как-то давно писал про это. В основном рассматривались решения без флэша, но сегодня я хотел бы поговорить про плагин для jquery с использованием флэша, а именно о JQuery Uploadify.

Конечно, можно использовать и другой флэшевский загрузчик SWFUpload, но Uploadify, по моему мнению, на порядок легче и проще, вполне подходит для большинства целей, ну и конечно не забываем, что это плагин для нашего любимого jquery, что избавляет нас от подключения еще каких-либо библиотек ;)

Теперь рассмотрим всё на примере.

Использовать плагин очень просто, как и большинство других jquery плагинов ;)
Естественно, сперва подключаем js файлы:

<script type="text/javascript" src="jquery.uploadify.v2.1.0.min.js"></script>
<script type="text/javascript" src="swfobject.js"></script>


* This source code was highlighted with Source Code Highlighter.


Все успели заметить swfobject.js? Отклоняться от темы не буду, почитать про SWFObject и всего его плюсы можно в этом посте на Хабре.

Далее идёт следующий код:
$(document).ready(function() {
  $("#uploadify").uploadify({
    'uploader'    : 'uploadify.swf',
    'script'     : 'functions.php',
    'checkscript'  : 'check.php',
    'cancelImg'   : 'cancel.png',
    'queueID'    : 'fileQueue',
    'auto'      : true,
    'multi'     : true,
    'fileDesc'   : 'jpg',
    'fileExt'   : '*.jpg',
    'onComplete'   : function(event,queueID,fileObj,response,data) {$('#response').append(response);}
  });
});


* This source code was highlighted with Source Code Highlighter.


Теперь немного подробнее.

uploader — путь до самого флэш загрузчика uploadify.swf

script — это путь до нашего файла обработчика, у меня это файл functions.php, но в архиве с библотекой он именуется как uploadify.php.

checkscript — путь до скрипта, который будет проверять наш файл до загрузки его на сервер. В файле, идущем в архиве с плагином, проверяют существования файла с таким же именем на сервере.

cancelImg — путь до картинки, которая будет символизировать удаления файла.

queueID — id элемента, в котором будет содержаться список выбранных нами файлов. По умолчанию он создаётся ниже браузерной кнопки выбора файла.

auto — параметр, отвечающий, будут ли файлы загружаться автоматически сразу после их выбора, или нет. Если стоит значение false, то для начала загрузки можно использовать этот код:
<a href="javascript:$('#uploadify').uploadifyUpload();">Загрузить файлы.</a>

* This source code was highlighted with Source Code Highlighter.

Естественно, можно повесить вместо ссылки картинку или кнопку, тут уже на Ваш выбор.

multi — будет ли наш плагин служить для загрузки нескольких файлов, иль не будет :) Для загрузки одного файла можно обойтись и без флэша, так что смело оставляем тут true.

fileDesc — типы файлов в диалоге выбора. У меня тут стоят только jpg файлы.

fileExt — расширения файлов, разрешенных для загрузки. Смело можно добавить к моим jpg и другие, например: *.jpg;*.bmp;*.png.
Незабываем добавить эти типы файлов и в fileDesc, иначе не сможете выбрать эти файлы в диалоговом окне ;)
Также советую всё-таки проверять типы файлов на стороне сервера, ибо такую проверку на стороне клиента легко обойти ;)

onComplete — функция, которая будет вызвана сразу после загрузки файла. Замечу, не после загрузки всех файлов, для этого есть onAllComplete, а именно одного файла из очереди.
Данная функция будет вызываться каждый раз, как будет загружен очередной файл. У меня вызывается функция, которая получается ответ от моего обработчика functions.php и вставляет его в div с id response:
function(event,queueID,fileObj,response,data) {$('#response').append(response);}

* This source code was highlighted with Source Code Highlighter.


Страница самого плагина:
http://www.uploadify.com/

Страница с расширенной документацией по всем параметрам и функциям:
http://www.uploadify.com/documentation/

Вот собственно и всё. Будут вопросы — с радостью попытаюсь на них ответить и всячески помочь ;)
_________
Текст подготовлен в ХабраРедакторе
+54
7 октября 2009, 18:45
221

комментарии (105)

+6
VIST #
Я наивный, думал, что кроме FancyUpload ничего нету. Спасибо за обзор.
0
MniD #
Всё как раньше, при попытке загрузить большие файлы браузер виснет, только что проверил в лисички 3.5 и хроме под линухой, оба браузера повисле при нажатии аплоад, а файл грузил не больше, всего 49 метров…
Так что годиться только только для фоток (и то не очень больших), а прочих мелких файликов =(
0
SpirITzzz #
а в php.ini какой-значение стоит?
+1
SpirITzzz #
хотя не заметил, что вы написали что виснет браузер, php.ini тут видимо не при делах
+2
Laughboy #
тестил загрузку больше ста фоток (2.5мб в среднем) отлично справляется

Там в дефолтовой поставке идет скрипт на проверку размера и формата совместимости — уверен проблема была в нем (у себя переделал его сразу)
+2
Laughboy #
Прошу прощения, пересмотрел конф — просто отключил проверку на лимит размера закачки.
0
makis #
Я заметил, что браузер виснет во время выгрузки файлов. После выгрузки развисает.
0
koshpavel #
это не только для больших, для маленьких тоже, просто маленькие у тебя видимо очень уж быстро грузятся
0
avorobiev #
Использую FancyUpload — отлично загружаются файлы размером до 3 мб (больше не требуется, хотя автор плагина писал что загружал и 2 GB). Правда технически загружаю по одному файлу за одно соединение, а не все файлы за раз (а то непонятно какие лимиты установить на размер входящих данных и на время работы скрипта...)
Подвисаний нет.
Но, сталкивался с конфликтом с антивирусом касперского. Вопрос решился обновлением антивируса до 10 версии и настройкой в нем сайта, на которорый осуществляется аплоад, как доверенного.
0
naz #
И не забываем о баге с кукис и http authentication ето касается всех браузеров кроме експлорера.
А так, скрипт весьма неплохой.
0
kiokumicu #
Есть такое. У меня тоже повис FF 3.5
0
developer #
swfupload лишен таких косяков
swfupload.googlecode.com

у меня репартеры на autopeople.ru загружают им видео ролики больших размеров (200 мб)
+3
Wott #
Меня всегда прикалывают плагины на десятки килобайт, являющимися обертками вокруг 10 строчек, состоящими на половину из перетасовывания настроек.
0
SpirITzzz #
ну, лично для меня плагин весом в 7кб js + 22 флэш загрузчик — не так уж и критично, если он облегчает жизнь :)
0
medvoodoo #
к сожалению 90% сторонних плагинов к jquery обвешены не нужным для меня функционалом(так же как и большинство других плагинов, хоть в той же symfony), что негативно сказывается как на размере и скорости работы так и на стабильности, так что для себя разработал следующую схему: разбираюсь как работает плагин, потом переписываю, минимализируя под свои задачи. В итоге, согласен с Wott, килобайты заменяются десятками строк.
+1
Cake_Seller #
Каждый выбирает для себя, что ему важнее — производительность приложения, либо скорость разработки этого приложения. Всё зависит от поставленной задачи. Думаю, в большинстве случаев лишние 50-100 Кб на страницу сайта — это не критично (с учетом быстрорастущей ширины каналов пользователей) в сравнении с экономией времени затраченного на разработку.
0
medvoodoo #
применительно конкретно к этому плагину, смотрим коментарии, какие ошибки и какие трудности возникают, я намного быстрее перепишу и переделаю его с нуля, чем буду в этих килобайтах копаться и выискивать баги, которые к тому же возможно индивидуальны :)
+2
kmike #
А никто не знает flash-загрузчик, который кроме загрузки еще картинки пережимает на клиенте? Можно и платный.
+2
Fesor #
Готового такого не знаю. Но не сильно сложно сделать это и с этим плагином. Благо исходник есть)
0
ktonado #
если мне память не изменяет, то у флеша есть ограничения по работе с локальными файлами с диска пользователя. так что может оказаться, что предварительный ресайз невозможен без предварительной закачки на сервер. но могу врать :)
0
freeAKK #
Это скорее уже нужен java загрузчик
0
andrei4 #
У никто не видел толковый open source загрузчик на java?
+1
deerua #
у вконтакта скомуниздь, мультизагрузка и пережим-жим картинок %)
0
kmike #
Собрался и написал свой аплоадер под google gears, unobtrusive-аналог загрузчика вконтакте, картинки пережимает, превью показывает, файлы загружает, обычную отправку форм эмулирует — не нужно делать никаких изменений на стороне сервера, есть хелперы для интеграции с django-вскими formset'ами.

Пока документация не готова, но мне нравится, что получается. Пока в качестве preview кину сюда ссылку на него, вдруг кому пригодится. Лицензия MIT, так что если кому интересно — используйте, подключайтесь к разработке. Пиар проведу, так сказать, предварительный.

bitbucket.org/kmike/gearsuploader/wiki/ru
+3
Laughboy #
Использую этот загрузчик в ЦМС что пишу на codeigniter.
В самом Uploadify было несколько неприятных глюков, но после последнего апдейта (был в конце лета) почти все хорошо за исключением:
1. Иногда улетает окно выбора файлов если долго искать что выбрать(ФФ+Open Suse 11.1) — возможно проблемы с самим ГТК.
2. Окно выбора файлов не запоминает последнюю директорию, иногда просто не удобно рыскать по попкам (опять же не тестил в вин, в лине возможно проблемы с ГТК).
Одно что не совсем хорошо — в флешке некорректно отображается русский (думаю можно подпилить напильником в флеше)

+3
SpirITzzz #
1) под win ff 3.5.3 пока такого не замечал.
2) опять же, у меня всё запомнило :) вин. ff 3.5.3

пысы: про попки особенно понравилось ;)))
0
Laughboy #
)))
+2
n0ne #
Я задолбался воевать с глюками Uploadify и его сочленения с CI, тупо перешёл на SWFUpload, чему и рад вполне (-:
0
MpaK999 #
Не подскажите, как вы решили проблему автоматический созданий сессии в CI и то, что SWFUpload создает свою id сессии при передачи?

На данный момент у нас решено только принудильной подачей своей id сессии как дублирующей :(
0
DrVirus #
А как обстоят дела с загрузкой файлов с кириллическими именами?
У меня получилось загрузить только .jpg, и то, имя оказалось пустым.
–1
DrVirus #
В файле upload.php добавил в строку А-Я:

$valid_chars_regex = 'А-Я.A-Z0-9_ !@#$%^&()+={}\[\]\',~`-';

Получилось хотя бы избегать пустоты, вместо имени файла.
0
insaner #
Спасибо за наводку.
0
andrei4 #
Ага, у меня те же проблемы на сусе 11.1.
0
Fesor #
Интересный плагин, буду использовать в своих проектах.
+1
niro #
Плагин может сообщать количество переданной информации клиенту без скриптов со стороны сервера?
0
SpirITzzz #
да, вполне :)

почитайте на сайте про onAllComplete .
Если не разберетесь — сделаем примерчик :)
0
niro #
A function that triggers when all file uploads have completed. There is no default event handler.

Вы, судя по всему, меня немного не правильно поняли — о количестве переданной информации во время передачи, т.е. чтобы был прогресс загрузки. Сейчас у меня получается видеть только финиш загрузки, без каких-либо промежуточных данных.
0
SpirITzzz #
хм, а прогрессбар у вас не срабатывает? И какая промежуточная информация вам еще нужна?
Как понимаю, помимо прогресс бара вы хотите добавить отображения количества загруженных байт?
0
niro #
Да, хотя бы их
0
SpirITzzz #
ну есть и такая функция, onProgress называется :) опять же, почитайте про неё на офф. сайте.
Думаю это то, что вам нужно :)
0
lol2Fast4U #
ну, это браузер должен делать. Хром делает, кстати.
0
niro #
Но, сколько уже версий браузеров прошло, но ни Opera, ни Firefox этому не научились.
А сам прогресс загрузки реализовал без использования этого модуля — понял силу jQuery.
+1
acy #
Есть бага: при загрузке изображений или файлов некоторых, правда у меня не получается локализировать проблему и хоть как-нибудь понять от чего это зависит, плагин загрузив файл на сервак возвращает ошибку — мол никак, не получилось, ты уж прости. Просто редкие файлы грузит, но по окончанию выдаёт что-то вроде: IO Error — 1.zip — 100%, как итог — файл не загрузился.
0
recompileme #
Это бага видимо во флеше. Если интернет через прокси, с аутентификацией, то плагин, скорее всего работать не будет.
Пробовал другие плагины — ситуация аналогичная.
Поэтому, необходимо оставлять возможность стандартного аплоада через html.

По плагину: недавно внедрил на свой сайт — интерфейс красивый, но есть глючки в старых версиях плагина. Причем примеры идут со старыми, нерабочими версиями, что вносит путаницу, и нет дебагера, позволяющего понять что происходит. В итоге отлаживал скрипты в swfupload (там есть дебагер), а потом подменил его на uploadify. Так же есть нюанс — скрипт аплоада должен быть в отдельной библиотеке или в отдельном блоке script (об этом написано на форуме плагина, пока нашел в чём дело — голову сломал). Вобщем внедрить сложно, но заставить работать — можно.

Посмотреть плагин в действии можно тут:
mp3tter.com
+1
recompileme #
Ещё, помогает понимание того, как эта штука работает. Реально, файлы загружаются не в указанную директорию, а во флешку!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;
}

if ($request_filename !~ (js|css|ico|gif|jpg|m3u|swf|zip|png|images|robots\.txt|my_index_file\.php*) ) {
rewrite ^/(.*)$ /mp3tter.php/$1 last;
}
0
recompileme #
не совсем точно описал:
1. файл загружается во флешку
2. файл сохраняется из флеш в темповую директорию сервера
3. скрипту передается массив $_FILES содержащий имена загруженных файлов
как то так.
0
rimmer #
вы уже наверное давно локализировали проблему, но для остальных, кто попадет сюда из поиска.

оказывается, у меня проблема была в самом флеше под линукс. он не хотел авторизироваться с помощью http-basic.в винде он спрашивает диалог авторизации, в моей убунте — просто игнорит и выдает ошибку.

буду копать, чтобы обойти эту хрень
0
bar_boss #
Есть еще одна проблема: ошибка I/O Error возникает при работает с доменами.рф
–4
nekt #
Плагин для вашего любимого jquery.

Я думаю я относился бы к вашему любимому jquery если бы не было так много людей что без него ничего не могут сделать на жаваскрипте.
+2
medvoodoo #
А почему вы решили что они на jquery могут что-то сделать? Использовать плагины- это одно, а писать самому с использованием фреймворка -это немного другое, имхо, тут тоже необходимо неплохое знание жабаскрипт. И почему бы не любить фреймворк за удобство и функциональность?

Я ЛЮБЛЮ JQUERY больше чем PROTOTYPE :)
0
lol2Fast4U #
Зачем делать что-то на чистом жабоскрипте? Чистый нужен только тогда, когда надо очень мало написать. По онклику скрыть див.
А если писать что-то серьёзное без фреймворка — это уже велосипед (:
0
DrVirus #
А у всех ли файл попадает в директорию uploads?
Даже скрипт с примером этого не делает у меня.
0
avorobiev #
Файл при аплоаде изначально попадает во временную директорию, определенную в настройках php.ini (см. секцию «File Uploads» и в ней upload_tmp_dir)
А оттуда php-командой move_uploaded_file можно его переместить куда требуется.
0
Laughboy #
Есть параметр настройки folder — там задается путь куда грузить
0
DrVirus #
Знаю. Не реагирует никак.
0
SpirITzzz #
попробуй при инициализации плагина добавить параметр folder: 'uploads'
0
Mylistryx #
Столкнулся с некоторыми «багами» при использовании этого плагина:
1. Если на клиентской стороне работает Касперский, то загрузка каждого файла (прогрессбар) сразу показывает 100%. При отключеном касперском — нормально.
2. (хотя тут возможно виноват сервер) Загрузка больших файлов (около 500Мб) доходит до 100% и все, никаких действий от скрипта вы не дождетесь, возникает ощущение, что скрипт ждет json, но не получает и ожидание это может продолжаться вечно!
IO Error — бывает, но не часто…
0
recompileme #
выше написал как оно работает. Сначала файл загружается во флеш, и только потом сохраняется на сервер. Т.е. в момент, когда градусник показывает 100% — начинается сохранение файла. Просто подождите пока файл сохранится.
0
avorobiev #
Настройте в касперском сайт, на который аплоадите файл, как довернный. Правда такую настройку удалось обнаружить только для KAV 10, в девятом ее не нашел…
(Настройка/Защита/Вэб антивирус/Настройка/Оптимизация проверки/кнопка Выбрать/ добавьте сюда записть типа *yoursite.com*), и все будет работать.
0
Mylistryx #
Спасибо, как настроить я знаю, да и проблема с прогрессбаром меня не напрягает, но есть начальство которому не нравится такая визуализация процесса загрузки, вот и думал, мало ли кто то находил решение этой проблемы…
0
p00h #
Это все потому, что касперский любые файлы и письма, отправляемые во внешний инет, сразу «закачивает» на себя, говоря приложению, что все в порядке. Дальше сканит и уже после проверки доставляет адресату. Вот потому у браузера и возникает ощущение, что файл загружен: касперский ему так говорит. Установлено опытным путем, могу ошибаться.
0
niro #
Возможно баг — параметр buttonText не принимает utf-8, например, вместо русского текста — цифры.
0
niro #
И еще — возможна ли передача текущей пользовательской сессии?
Так получается, что скрипт просто отсылает данные на сервер независимо от браузера.
0
recompileme #
Дополнительные параметры можно передавать через контейнер 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();
}
0
VIST #
Но эти данные будут переданы как GET, а как сделать, что бы передавалось как POST?

Бывает нужно вместе с файлом передать, порядка 64К текста.
0
SpirITzzz #
это уже видимо проблема во флеше, нужно его расчленять и разбираться.
0
Glook #
существует ли возможность как-то ограничить количество загружаемых файлов при множественной (Multiple) загрузке
+1
andrei4 #
simUploadLimit, если в очереди больше файлов — то придется после загрузки количества, равного simUploadLimit нажать еще раз кнопку начала загрузки.
0
Timmay #
Достаточно непредсказуемая вещь… Если загружать ~30 файлов за раз, то некоторые вылетают с HTTPError. Это не всегда и не поддаётся систематизации =(
+1
andrei4 #
Есть еще момент — всегда отдавайте хоть что-то в response сервера, иначе не будут работать события onComplete/onAllComplete.
0
Laughboy #
Да-да)) тот же echo «1»; :)
0
Drinker #
Единственный неприятный момент в использовании флеша для загрузки файлов — необходимость передавать идентификатор сессии в открытом виде.
Т.е. оно, конечно, не сильно смертельно, если речь идёт об админке — куда доступ одного человека разрешён, другое дело когда это сервис, где толпа народу, имеющая право что-то загружать. Вот тогда уже не так всё кучеряво хотя терпимо.
Кстати, если стоит суровый скрипт (у меня в CakePHP всё сурьёзно) — следует ещё и проверку UserAgent отключать — ибо сессия сессией, а агент-то меняется :)

Спасибо за плагин
0
azza #
Как побороть айди сессии при загрузке файлов? есть ли способ его менять на нужный мне?
0
boston #
Передавать нужный id сессии через параметр.
0
azza #
через параметр где? в скрипте или в пхп?
0
insaner #
Да действительно очень полезный плагин, но если кто подскажет как его прикрутить к фреймворку, а точнее как должен выглядеть метод контроллера, которому передается массив с файлами. Много мучился привязать его к CI, но ничего не получилось.
0
Laughboy #
Вот как сделав у себя (/system/application/modules/upload/ — тут сам плагин и нужные файлы):
Настройка плагина (думаю спокойно можно вынести в отдельный js, но не пробывал)

$(document).ready(function() {

$('#fileUpload').fileUpload({
'uploader': '/system/application/modules/upload/uploader.swf',
'script': '/system/application/modules/upload/upload.php',
'folder': '/assets/images/tmp',
'cancelImg': '/system/application/modules/upload/cancel.png',
'multi': true,
'buttonText': 'select files',
'displayData': 'percentage',
'simUploadLimit': 1,
'fileExt': '*.jpg;*.jpeg;*.gif;*.png',
onAllComplete: function(event, data){
$("#loadTips").append(«Файлов загружено: „+data.filesUploaded+“
»);
$("#loadTips").append(«Ошибок: „+data.errors+“
»);
$("#loadTips").append(«Загружено: „+data.allBytesLoaded+“ байт
»);
},
onComplete: function(event, queueID, fileObj, response, data){

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)}); /* сюда попадают сразу загруженные изображения */
}
);
});
},

onError: function(event, queueID, fileD, errorObj){
$("#loadTips").append(«event: „+event+“
»);
$("#loadTips").append(«queueID: „+queueID+“
»);
$("#loadTips").append(«fileD: „+fileD+“
»);
$("#loadTips").append(«errorObj.status: „+errorObj.status+“
»);
$("#loadTips").append(«errorObj.text: „+errorObj.text+“
»);

}
});

метод что используется после загрузки /admin/upload/doupload/

function doupload(){
$data['name'] = $this->input->post('name');
$data['path'] = $this->input->post('path');

/* тут любая обработка уже загруженных изображений в folder: /assets/images/tmp у меня — зум, первоначальная обработка, запись в БД… */

}

Думаю этого достаточно. Сам плагин подключается в контроллеры через плагин галереи (сделан по аналогии как делать плагин подключения FCK едитора)
0
Laughboy #
Парсер маленько попаскудил код, но думаю суть понятная :)
0
insaner #
Спасибо, попробую
0
vrazbros #
Вот бы к этому плагину прикрутить форму по удалению уже загруженных или загрузку новых файлов вместо уже имеющихся.
0
SpirITzzz #
я у себя и прикрутил :) в чём сложность? это уже вопрос даже не к плагину :)
0
vrazbros #
да, плагин тут ни причем, просто пока не придумал как это реализовать
0
fear86 #
а cookie он сохраняет?
0
kompo #
Поправьте в примере: в «checkscript», «script» должен быть с большой буквы: checkScript.
Я долго думал, почему же оно у меня не работает :)

А «folder» как-то не понятно рабоает, все равно добавляет путь к скрипту, хотя в доке и написано: For absolute paths prefix the path with either '/' or 'http'.
0
SpirITzzz #
спасибо, исправил :)
0
SpirITzzz #
хотя, как бы я не правил, хабра менять checkscript на checkscript О_о
0
kompo #
хаброглюк, круто-круто =)
а в описании тоже не даёт?
0
SpirITzzz #
тоже, хм…
0
SpirITzzz #
даже в комментарии поменял…
0
tapazukk #
Вопрос, как в файле настроек поменять скажем локализацию Uploadify, не затрагивая основной плагин (в данном случае jquery.uploadify.v2.1.0.min.js), дабы безболезненно в дальнейшем обновлятся.
Или скажем поменять внешний динамически создаваемых вид элементов аплоадера (тот-же програесс бар, когда одинм css не обойтись)?

0
SpirITzzz #
касательно локализации — поднималась тема на офф. форуме плагина, почитайте вот тут:
www.uploadify.com/forum/viewtopic.php?f=3&t=263&p=1099&hilit=localization
0
AlienNiki #
<script type=«text/javascript»>
jQuery(document).ready(function() {
jQuery("#uploadify").uploadify({
'uploader': '/flash/uploadify.swf',
'script': '/test.php',
'cancelImg': '/img/admin/cancel.png',
'queueID': 'fileQueue',
'auto': true,
'multi': false,
'method': 'GET',
'scriptAccess': 'always',
'fileDesc': 'Audio (*.mp3)',
'fileExt': '*.mp3',
'onError': function(event,queueID,fileObj,errorObj) { },
'onComplete': function(event,queueID,fileObj,response,data) { }
});
});
</script>

лог апача пишет следующее:

«POST /test.php?folder=%2Fmusic%2F&fileext=%2A%2Emp3 HTTP/1.1» 302 207 "-" «Shockwave Flash» 24188 4

и ещё странная штука. флешка 2 раза вызывает test.php в начале загрузки и в конце.
0
AlienNiki #
Видимо всем пофик
+1
fog #
А как хэндлить ошибки?
Тоесть, если у меня произошла ошибка на стадии, например, копирования файла из временной директории в директорию назначения — как сообщить об этом в скрипт, отправивший файл?

Там в примере uploadify.php в конце есть строкаи

echo '1';
и
echo 'Invalid file type.';

Но как их ловить — непонятно, onError не вызывается, в onAllComplete тоже errors: 0… куда рыть?
0
alex_vk #
2 fog:
Нет решения по поводу того, как хендлить ошибки?
0
fog #
Если честно, я уже не помню как я тогда разобрался :)
0
fog #
Вот ответ,
Я когда задавал вопрос — невнимательно прочитал пример

'onComplete': function (event, queueID, fileObj, response, data) {$('#response').append (response);}
0
RayZ #
Думаю, стоит об этом сказать, но на текущий момент плагин некорректно работает. Возможно, дело в более новой версии jQuery. Но факт остается фактом. upladifySettings вызывает ошибку. Потратил много времени на изоляцию проблемы, и бросил в пользу SWFUpload.
0
ilya_compman #
и я
у swf upload даже примеры понятнее и приятнее
0
RayZ #
Ага, только я оказался таким ветреным, что через 5 месяцев подсел на другую библиотеку, лишенную флеша — Ajax Upload.
0
RayZ #
По крайней мере нет никаких проблем с изоляцией авторизации, подгрузкой и стилизацией аплоадера. Просто нет. И библиотека в целом весяг в 3 раза меньше SWFUpload.
0
ilya_compman #
эх, один минус. Как я понял, если использовать сторонний класс для заливки файла (class.upload), то прогресс-бара не будет :(
0
RayZ #
Это не минус. Это обязательное условие. Хотя в принципе, у вас есть возможность самому написать хэндлер загрузки, который будет обрабатывать прогресс загрузки.
0
ilya_compman #
Не получилось почему-то, никак не хочет прогресс бар показывать.
Плюс не нашёл, как ограничить количество загружаемых файлов
0
ilya_compman #
Чёрт! *снова удаляет файлы библиотеки*

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.