Загрузка большого файла - PullRequest
       27

Загрузка большого файла

12 голосов
/ 30 августа 2008

Internet Explorer имеет ограничение на скачивание файлов 4 ГБ (2 ГБ в IE6). Firefox не имеет этой проблемы (еще не тестировал сафари) (Подробнее здесь: http://support.microsoft.com/kb/298618)

Я работаю над сайтом, который позволит пользователю загружать очень большие файлы (до 100 ГБ и более)

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

Я предполагаю, что нам понадобится ActiveX или Java-апплет, чтобы осуществить это. Что-то вроде менеджера загрузок, который использует MSDN.

Кто-нибудь знает о коммерческом (или бесплатном) компоненте, который будет это делать? Мы не хотим, чтобы пользователю приходилось устанавливать менеджер загрузок «в браузере» (например, GetRight), мы хотим, чтобы он работал только с загрузками на нашем сайте.

Обновление: Вот дополнительная информация, которая поможет уточнить, что я пытаюсь сделать. Большинство файлов, превышающих 4 ГБ, будут большими видеофайлами HD (для компании, занимающейся редактированием видео). Они будут загружены пользователями через Интернет, это не будут люди из локальной сети. Мы хотим, чтобы файлы были доступны через HTTP (некоторые пользователи будут находиться за брандмауэрами, которые не разрешают FTP, Bittorrent и т. Д.). Это будет библиотека файлов, которую может загрузить конечный пользователь, поэтому мы не говорим об одноразовой большой загрузке. Будет загружаться различные большие файлы на полурегулярной основе.

Пока что Vault, предложенное @ Edmund-Tay, является наиболее близким решением. Единственная проблема заключается в том, что он не работает для файлов размером более 4 ГБ (он мгновенно завершается сбоем перед началом загрузки, они, вероятно, используют где-то 32-битное целое число, которое превышает / переполняется длиной содержимого файла).

Лучшим решением будет Java-апплет или компонент ActiveX, поскольку проблема существует только в IE, которая будет работать, как в статье @spoulson, на которую ссылается. Однако до сих пор мне не повезло найти решение, которое бы делало что-то подобное (многократные загрузки, резюме и т. Д.).

Похоже, нам, возможно, придется написать свой собственный. Другой вариант - написать приложение .Net (может быть, ClickOnce), которое связано с расширением или типом mime. Затем пользователь фактически загружает небольшой файл с веб-сервера, который открывается в приложении exe / ClickOnce, и сообщает приложению, какой файл загрузить. Так работает загрузчик MSDN. Конечный пользователь должен будет загрузить / установить EXE только один раз. Это было бы лучше, чем скачивать exe-файлы каждый раз, когда они хотели загрузить большой файл.

Ответы [ 15 ]

7 голосов
/ 30 августа 2008

@ Леванд:

В этих ситуациях я, как пользователь, предпочитаю загружать облегченный .exe-файл, который скачивает файл для вас.

Это соглашение для многих, многих сайтов. Пользователи или должны крайне неохотно скачивать файлы .exe с веб-сайтов и запускать их по воле случая. Даже если они не всегда ведут себя осторожно, неосторожно, это не , что мы должны поощрять как ответственные разработчики.

Если вы работаете над чем-то, похожим на корпоративную интранет, то .exe может быть хорошим решением, но для общедоступной сети? Ни за что.

@ TonyB:

Каков наилучший способ сделать это без использования FTP.

Извините, но я должен спросить, почему требование. Ваш вопрос звучит для меня следующим образом: «Какой лучший способ приготовить стейк без мяса или источников тепла?» FTP был разработан для такого рода вещей.

6 голосов
/ 30 августа 2008

битторрент

Уже было несколько веб-версий ( bitlet , w3btorrent ), и Azureus был построен с использованием Java, так что это определенно возможно.

Редактировать: @TonyB ограничен портом 80?

4 голосов
/ 30 августа 2008

Пожалуйста, не используйте ActiveX ... Я так устал от сайтов, которые можно просматривать только в IE.

В этих ситуациях я, как пользователь, предпочитаю загружать облегченный .exe-файл, который скачивает файл для вас.

2 голосов
/ 30 августа 2008

Можете ли вы разбить файлы на части и затем присоединиться к ним после загрузки?

1 голос
/ 28 января 2009

Как насчет высказывания «Мы рекомендуем установить Free Download Manager для загрузки этого файла. Вы получите дополнительное преимущество, заключающееся в возможности возобновить файл и ускорить загрузку».

Лично я никогда не скачиваю ничего, используя встроенный в браузер инструмент загрузки, если только мне не нужно (например, вложения Gmail)

1 голос
/ 03 сентября 2008

Несколько идей:

  • Blizzard использует облегченную упаковку BitTorrent .exe для своих исправлений. Я не совсем уверен, как это сделать, но похоже на фирменную версию официального клиента BitTorrent.
  • Загрузка в Amazon S3, предоставление торрент-ссылки файла (все файлы S3 автоматически поддерживают BitTorrent), а также полная ссылка для загрузки HTTP в качестве альтернативы. См. Документацию S3
1 голос
/ 30 августа 2008

Если вы не хотите писать собственный Java-код, существуют коммерческие апплетные решения:

У них обоих есть версии eval, которые вы можете скачать и протестировать.

0 голосов
/ 03 сентября 2008

Взгляните на cURL . В этой статье описывается, как выполнить одновременную загрузку из нескольких частей через HTTP. В прошлом я использовал cURL для управления загрузками по FTP файлов размером более 300 ГБ.

Еще один совет: вы можете еще больше увеличить время загрузки, если увеличите размер окна TCP в конфигурации NIC клиента. Установите его настолько высоко, насколько позволяет ОС, и вы должны увидеть улучшение в 2 раза в зависимости от вашей физической сети. Это работало для меня в Windows 2000 и 2003 при FTP через WAN. Недостатком является то, что это может увеличить накладные расходы для всего другого сетевого трафика, который требует всего несколько КБ для сетевого пакета, но теперь вынужден отправлять / получать в пакетах по 64 КБ. Ваш пробег может отличаться.

Редактировать: Что именно вы пытаетесь достичь? Кто зритель? Я предполагаю, что вы собираетесь делать это через свою собственную сеть; но вы, кажется, подразумеваете, что клиентская сторона - это кто-то в Интернете. Я думаю, что нам нужны более четкие требования.

0 голосов
/ 03 сентября 2008

Некоторые пользователи будут находиться за корпоративными брандмауэрами, которые не разрешают FTP ...

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

0 голосов
/ 30 августа 2008

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

Это может быть возможно при использовании Java Web Start (он же JNLP). Я думаю, что если это подписанное приложение, оно может получить дополнительное разрешение на запись на жесткий диск. Это не слишком отличается от подхода загрузки. Проблема заключается в том, что у пользователя должна быть установлена ​​правильная версия Java и должна быть правильно настроена возможность Java Web Start.

Я бы порекомендовал подход exe, так как он будет проще для пользователей, не имеющих технических знаний.

...