Подтвердить что ты не робот

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

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 файлы каждый раз, когда они хотели загрузить большой файл.

4b9b3361

Ответ 1

@levand:

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

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

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

@TonyB:

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

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

Ответ 2

bittorrent?

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

Изменить: @TonyB ограничивается портом 80?

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Как насчет того, чтобы сказать "Мы рекомендуем вам установить Free Download Manager, чтобы загрузить этот файл. У вас будет дополнительное преимущество: возобновить файл и ускорить загрузку."

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

Ответ 8

@travis

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

Ответ 9

@levand Проблема существует только в IE (она работает в Firefox), тогда как ActiveX будет работать только с IE, IE - единственная, для которой нам нужна работа.

@travis - интересная идея. Не уверен, что он будет работать для меня, но я буду помнить об этом. Я надеюсь найти что-то для интеграции с существующим сайтом вместо того, чтобы выходить на сторону третьего лица. Это также потребовало бы, чтобы я установил трекер bittorrent, который был бы не таким простым, как это звучит для этого приложения, потому что разные пользователи будут иметь различный доступ к различным файлам.

Ответ 10

@jjnguy Я ищу Java-апплет или компонент ActiveX, который сделает это для меня. Это нетехнические пользователи, поэтому мы просто хотим, чтобы они нажимали кнопку "скачать", а полный файл заканчивается в указанном месте.

Ответ 11

@ceejayoz

Я полностью согласен, но его часть требования для нашего клиента. Будет доступ к FTP, но у каждого пользователя будет возможность загрузки через HTTP или FTP. Есть некоторые пользователи, которые будут за корпоративными брандмауэрами, которые не позволяют FTP

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

Ответ 12

Я говорю, что менеджер загрузок с установленным кликом, похожий на msdn.

Но становление CDN без более оптимизированного протокола для задания - непростая задача. Я не могу представить бизнес-модель, которая может быть достаточно достойной, чтобы иметь такую ​​большую загрузку файлов в качестве основной компетенции, если вы не делаете что-то вроде msdn. Если вы создаете толстый клиент, вы, по крайней мере, получите возможность встретиться с пользователями, рекламой или какой-либо другой моделью дохода, поскольку вы, вероятно, будете платить сотнями тысяч долларов за такую ​​услугу.

Ответ 13

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

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

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

Ответ 14

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

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

Ответ 15

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

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

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