Очередь асинхронной загрузки файлов HTTP - PullRequest
6 голосов
/ 27 февраля 2010

Есть ли способ поставить в очередь загрузки файлов, не прибегая к Flash или Silverlight, просто с помощью грамотно используемых форм и JavaScript? Обратите внимание, что выгрузка должна выполняться асинхронно.

Под «очередями» выгрузки я подразумеваю, что если пользователь пытается выгрузить несколько файлов, они должны передаваться не одновременно, а по одному, за одно соединение HTTP.

Ответы [ 8 ]

2 голосов
/ 08 марта 2010

Я не верю, что это возможно сделать на одном HTTP-соединении из-за ограничений спецификации. Однако вы можете получить почти такое же поведение, разместив поля <input> в отдельных формах (будь то HTML или JavaScript) и отправив их по порядку.

Поместите свои цели на <iframe> и используйте событие iframe.onload, чтобы вызвать следующую форму в списке.

Дополнительные примечания:

  • См. this для ссылок на фреймы таргетинга. Обратите внимание, что эта функция не поддерживается в HTML / XHTML Strict.
  • Атрибут form.target должен быть равен атрибуту iframe.name. iframe.id не будет работать; Это вызывает всплывающее окно в IE6 и FF3.5.
  • Рабочий пример загрузки «все сразу» с использованием таргетинга доступен здесь . Я немного почистил этот пример и использовал его. Он работает в IE6 так же, как и в любом первоклассном браузере.
2 голосов
/ 03 марта 2010

У меня есть все основания полагать, что Uploadify очень хорошо. Более того, он поддерживает очереди изначально. Простой пример, который предполагает, что вы уже создали элемент «file» формы с идентификатором «foo» и элементом для использования в качестве очереди с идентификатором «queue». См. документы для получения дополнительной информации.

$("foo").uploadify({
  'uploader'  : 'uploadify.swf',
  'script'    : 'uploadify.php',
  'cancelImg' : 'cancel.png',
  'auto'      : true,
  'folder'    : '/uploads',
  'queue'     : "queue"
});
1 голос
/ 03 марта 2010

Один вариант, который я видел ранее, хотя у меня нет ссылки или примера, это использование iframe. По сути, файлы передаются в iframe, а JavaScript отслеживает, когда этот iframe перезагружается, а затем отправляет следующий. Это не красиво, и я думаю, что попробовал, но не смог заставить его работать в разных браузерах (что мне было нужно в то время, включая IE6).

0 голосов
/ 25 января 2011

В недавнем прошлом я написал плагин jQuery, который позволял бы вам делать что-то подобное. Я не могу опубликовать код, но я могу описать, как он работал. Если это не имеет смысла, дайте мне знать, как это было давно.

Был набор элементов формы загрузки. Когда файл был выбран, он отправлял на скрытый iFrame, содержимое (через base64) которого копировалось в скрытое поле формы. Затем при отправке окончательной формы содержимое скрытых полей формы используется для получения информации о файле.

Erick

0 голосов
/ 02 ноября 2010

Существует простой эффективный способ асинхронной загрузки файлов с помощью xmlhttprequest: см. https://developer.mozilla.org/en/using_xmlhttprequest в разделе «В Firefox 3.5 и более поздних версиях». При этом вы можете загружать файлы асинхронно, получая также прогресс загрузки. В Firefox 3.6 и более поздних версиях вы также можете загружать несколько файлов асинхронно. Я делаю функцию js для более простой работы, когда я закончу, я опубликую ее.

0 голосов
/ 09 марта 2010

этот плагин jquery утверждает, что без SWF http://valums.com/ajax-upload/

0 голосов
/ 09 марта 2010

Если вы ищете решение .Net и, более конкретно, решение Asp.Net MVC, взгляните на этот пост, http://dimebrain.com/2010/01/large-or-asynchronous-file-uploads-in-asp-net-mvc.html. Я поставил его в закладки для справки.

0 голосов
/ 03 марта 2010

Широко глядя на это, что нужно сделать:

  • Функция для динамического добавления форм (в html) с типом ввода в виде файла. Одна форма будет иметь только одно поле ввода файла. Эти формы будут нашей очередью загрузки файлов.
  • Функция отправки, которая будет отправлять эти формы одна за другой асинхронно.

Это простая логика, о которой я могу подумать [нужно кодировать, когда я вернусь домой].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...