Pull to refresh

Comments 25

Как минимум в топике не хватает ссылки на пример и ссылки на полный код «класса».
Честно признаться, не понял, чем ваше решение уникальное и почему вы не нашли аналогов (для примера то, с чем сталкивался — jQuery File Upload, Ajax Upload )?

setTimeout(FilesUploader.controller, FilesUploader.deley)

Зачем проверку делать по таймауту, если это можно сделать в complete?

1).Большим количеством запросов я быстро полажу к чертям свой сервер.
2) Большой объем одновременно загружаемых файлов забьет нам весь канал.

Если пользователей будет >1 ваше решение не поможет.
Спасибо вам, и всем ниже описавшим за ссылки и критику.

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

Если пользователей будет >1 ваше решение не поможет.
— это решение для админки, проект не настолько масштабный что бы было задействовано одновременно сразу большое количество администраторов.

Зачем проверку делать по таймауту, если это можно сделать в complete?
Возможно вы не поняли этого момента в статье(а возможно не понял вас я) — вызов новой функции в setTimeout а complete, реализован для того, что проверки происходили через некоторый период времени, а не постоянно, ведь файл мгновенно не загрузится.
я не нашел не одного готового решения, для загрузки файлов более чем через один запрос

На каждый файл свой ajax-запрос — именно так реализовано в приведенных примерах, какие проблемы?

это решение для админки, проект не настолько масштабный что бы было задействовано одновременно сразу большое количество администраторов

Тогда непонятно, зачем вы беспокоитесь о кол-ве запросов

проверки происходили через некоторый период времени, а не постоянно, ведь файл мгновенно не загрузится.

Зачем делать проверку по таймеру, если ее можно сделать сразу после очередной загрузки файла в complete?
Вот, берите www.plupload.com/ и не мучайте себя в следующий раз. Рекомендую также отделять процесс загрузки фалов от их обработки на сервере.
он же вроде flash использует?
Allows you to upload files using HTML5 Gears, Silverlight, Flash, BrowserPlus or normal forms
Понятно, просто в демках они только flash используют.
Видимо они перестраховываются и деградируют с флеша до html + js, а не наоборот
Ох ты ж ешкин кот, видимо смотрел наискосок я
Извините, что сразу критика, просто возникает множество вопросов:

Странно, что мы не можем настроить сервер таким образом, чтобы он не отдавал 503, и пытаемся «не забивать канал», делая проверку на клиенте, а не на сервере. По мне так это очень плохой костыль.

Странно, что мы считаем объем загружаемых файлов, а не скорость загрузки. Мы вроде хотим «не забивать канал»?

Кроме того имена переменных deley и fStek довольно сильно режут глаз.
Кроме того, в общем случае не рекомендуется объявлять переменные без ключевого слова var.
Например в функции controller вы выносите переменную item в глобальную область видимости.

Почему вы обращаетесь к свойствам вашего FilesUploader через this?
Когда вы вызываете функцию controller по таймауту this.maxThreads будет undefined, т.к. this уже не указывает на объект FilesUploader.

А в случае, когда надо вызывать функцию через определенный интервал используют setInterval, а не рекурсивно setTimeout.
Для JavaScript понятие потока не применимо; интерпретатор выполняет весь код строго по порядку и в один поток: код запущенный через setTimeout/setInterval будет исполнен по истечении указанного периода времени и когда текущая выполняемая интерпретатором функция закончит своё действие.
Вы совершенно правы, просто другого слова для обозначения этой сущности нет.

Интерпретатор конечно исполняет код в один поток.
Но «потоки в js» есть в том смысле, что при возникновении ошибки во время выполнения — останавливается только тот поток, в котором ошибка, а остальные работают нормально.
реальные проблемы при загрузке файлов могут начаться, когда мы грузим большие файлы (от 400мб).
все вышеперечиленые библиотеки не справляються с поставленой задачей, т.к. пытаються сразу прочитать весь файл в память, что в свою очередь вешает браузер.
Я вот тут в посте попытался разобрать процесс частичного чтения файла, что может помочь.
Если есть готовые решения, о которых я еще не знаю — буду очень признателен.
Давно хабраюзер safron написал отличную статью HTML5 File API: множественная загрузка файлов на сервер и недавно обновил и перенес на github код своего jQuery плагина damnUploader. Вот лично я нашел его плагин самым удобным для реализации задачи, подобной вашей.
Приобщу к общим ссылкам ещё вот этот шикарный загрузчик для Twitter Bootsrtap. Довольно большой и сложный, но очень уж толковый интерфейс. На Django лёг как влитой :)
Я уже давно использую valums.com/ajax-upload/ ( qq.FileUploader ) и радости моей от комфорта нет предела — можно перетаскивать в окно браузера несколько файлов, или выбирать их из диалогового окна, а потом наблюдать на прогрессом загрузки каждого отдельно.
Недавно использовал этот загрузчик в одном из моих проектов, удобно. Одно но – не получалось по-своему переименовать загружаемые файлы, например $filename = time(); Потом кое-как решил эту проблему. Даже вопросы на странице разработчика задавал, но ответа не было. Если не секрет, как вы решаете эту задачу?
Это – да. Но я немного не то имел в виду. Алгоритм такой:
1) Есть форма, в которой несколько полей, скажем, добавление новости для админки.
2) Среди прочих есть поле добавление картинки для новости. Админ загружает картинку, а покуда файл загружается, заполняет остальные поля.
3) Картинка загрузилась, миниатюра появляется в специальном контейнере, а в скрытом поле формы появляется имя файла – для добавления в базу наряду со всеми остальными данными.
4) Вот тут и была проблема – вернуть из php новое имя файла, которое было там сгенерировано.
Я сделал это так:
1) В том месте файла php, где возвращается удача или ошибка:
echo 'success_'.$new_filename;
2) В том месте скрипта javascript, где идет обработка ответа:
var my_response = response.split('_'); if(my_response[0] === "success") { // показываем только что загруженную картинку $('<li></li>').appendTo('#files').html('<img src="./uploads/'+my_response[1]+'.jpg" alt="" /><br />'+my_response[1]).addClass('success'); // скрытое поле формы получает новое имя загруженного файла $('#my_file').attr('value',my_response[1] + '.jpg'); }
Этот метод работает, но он не особенно красивый на мой взгляд.
Как вы считаете, можно сделать изящнее?
кто бы сделал дозагрузчик файлов на сервер, это было бы просто супер
Only those users with full accounts are able to leave comments. Log in, please.