Загрузка больших файлов по HTTP

Поскольку запрошенная комбинация невозможна, мы пропустили интеграцию JMS и используем классы IBM MQ для Java . https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q118320_.htm

JMS-решение подготовлено и может быть интегрирован, как только TomEE будут перенесены в 7.x.

13
задан Roel 29 January 2009 в 16:17
поделиться

5 ответов

Я опоздал на восемь месяцев, но я только что наткнулся на этот вопрос и был удивлен, что о webDAV не упомянули. Вы можете использовать метод HTTP PUT для загрузки и включить заголовок Content-Range для обработки возобновления и т.д. Запрос HEAD сообщит вам, существует ли уже файл и насколько он велик. Итак, возможно, что-то вроде этого:

1) ЗАГОЛОВКА удаленного файла

2) Если он существует и размер == локальный размер, загрузка уже выполнена

3) Если размер <локальный размер, добавьте Content-Range заголовок для запроса и поиска подходящего места в локальном файле.

4) Сделайте запрос PUT для загрузки файла (или части файла, если он возобновляется)

5) Если соединение не удается во время запроса PUT, начните заново с step 1

Вы также можете перечислить (PROPFIND) и переименовать (MOVE) файлы, а также создать каталоги (MKCOL) с помощью dav.

20
ответ дан 1 December 2019 в 21:38
поделиться

Вам нужен стандартный размер (скажите что 256k). Если бы Ваш файл "abc.txt", загруженный пользователем x, составляет 78.3 МБ, это были бы 313 полных блоков и один меньший блок.

  1. Вы отправляете запрос для загрузки утверждения имени файла и размера, а также количества начальных потоков.
  2. Ваш код php создаст временную папку, названную в честь IP-адреса и имени файла,
  3. Ваше приложение может затем использовать Многочисленные связи для отправки данных в различных потоках, таким образом, Вы могли отправлять блоки 1,111,212,313 одновременно (с отдельными контрольными суммами).
  4. Ваш код php сохраняет их в различные файлы и подтверждает прием после проверки контрольной суммы, давая количество нового блока, чтобы отправить или остановиться с этим потоком.
  5. После всего потока закончены, Вы попросили бы, чтобы php присоединился ко всем файлам, если что-то отсутствует, он был бы goto 3

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

Можно легко показать индикатор хода выполнения, или простой индикатор выполнения или что-то близко к подробному представлению downthemall блоков.

2
ответ дан 1 December 2019 в 21:38
поделиться

Действительно ли инвертирование является целым процессом опция? Я имею в виду, вместо того, чтобы протолкнуть файл к серверу заставляют сервер вытянуть файл с помощью стандартного HTTP, ДОБИРАЮТСЯ со всеми дополнительными свойствами (как принимать-диапазоны, и т.д.).

0
ответ дан 1 December 2019 в 21:38
поделиться

Возможно, самый легкий метод должен был бы создать страницу загрузки, которая примет имя файла и диапазон в параметре, таком как http://yourpage/.../upload.php?file=myfile&from=123456 и обработает резюме в клиенте (возможно, Вы могли добавить функцию для осмотра, какие диапазоны сервер получил),

0
ответ дан 1 December 2019 в 21:38
поделиться

libcurl (C api) could be a viable option

-C/--continue-at Продолжить / возобновить предыдущую передачу файла с заданным смещением. Заданное смещение - это точное количество байтов, которые будут пропущены, считая от начала исходного файла до его передачи в место назначения. Если используется для загрузки, команда SIZE FTP-сервера не будет использоваться curl. Используйте «-C -», чтобы указать curl, чтобы он автоматически определял, где и как возобновить передачу. Затем он использует данные файлы вывода / ввода, чтобы выяснить это. If this option is used several times, the last one will be used

2
ответ дан 1 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: