关于java:大文件下载

关于java:大文件下载

Large File Download

Internet Explorer的文件下载限制为4GB(在IE6上为2 GB)。 Firefox没有这个问题(尚未测试野生动物园)
(此处有更多信息:http://support.microsoft.com/kb/298618)

我正在一个允许用户下载非常大的文件(最大和超过100GB)的网站上。

不使用FTP的最佳方法是什么。最终用户必须能够使用HTTP从那里的浏览器下载文件。我认为Flash或Silverlight无法将文件保存到客户端,据我所知它们不会剪切文件。

我猜我们将需要一个ActiveX或Java小程序来实现这一目标。类似于MSDN使用的下载管理器。

有人知道这样做的商业(或免费)组件吗?我们不希望用户必须安装"浏览器范围内的"下载管理器(例如GetRight),我们希望它只能在我们的网站上进行下载。

更新:这是一些其他信息,可帮助您弄清我要做什么。超过4GB限制的大多数文件都是大型高清视频文件(适用于视频编辑公司)。这些将由用户通过Internet下载,而不再是本地网络上的用户。我们希望这些文件可以通过HTTP使用(某些用户将位于不允许FTP,Bittorrent等的防火墙之后)。它将是最终用户可以下载的文件库,因此我们不是在谈论一次大型下载。将半定期下载不同的大文件。

到目前为止,@ Edmund-Tay建议的dropbox是最近的解决方案。唯一的问题是,它不适用于大于4GB的文件(在开始下载之前立即失败,它们可能在文件内容长度超出/溢出的地方使用32位整数)。

最好的解决方案是使用Java applet或ActiveX组件,因为该问题仅存在于IE中,其工作方式就像链接到@spoulson的文章一样。但是,到目前为止,我还没有运气找到能完成类似工作的解决方案(分段下载,履历表等)。

看来我们可能不得不写自己的。另一种选择是编写与扩展名或mime类型关联的.Net应用程序(可能是ClickOnce)。然后,用户实际上是从exe / ClickOnce应用程序中打开的Web服务器下载一个小文件,告诉该应用程序要下载什么文件。这就是MSDN下载器的工作方式。最终用户将只需要下载/安装一次EXE。这比每次他们要下载大文件时下载exe都要好。


@levand:

My actual preference, as a user, in these situations is to download a lightweight .exe file that downloads the file for you.

对于许多网站而言,这都是一个大问题。用户要么或者应该非常不愿意从网站上下载.exe文件,然后随意地运行它们。即使他们并不总是那么谨慎,谨慎行为也不是我们作为负责任的开发人员应鼓励的事情。

如果您正在按照公司I??ntranet的方式工作,则.exe可能是一个不错的解决方案,但是对于公共Web而言?没办法。

@TonyB:

What is the best way to do this without using FTP.

对不起,但是我必须问为什么要这样做。您的问题让我读到"什么是没有肉或没有热源的牛排的最佳制作方法?" FTP是为这种事情而设计的。


bittorrent?

已经有一些基于Web的版本(bitlet,w3btorrent),Azureus是使用Java构建的,因此绝对有可能。

编辑:@TonyB是否限于端口80?


请不要使用ActiveX ...我讨厌只能在IE中查看的网站。

在这种情况下,作为用户,我的实际偏爱是下载一个轻量级的.exe文件,该文件将为您下载。


能否将文件拆分成多个部分,然后在下载后重新加入它们?


怎么说:"我们建议您安装Free Download Manager来下载此文件。您将获得能够继续恢复文件并加快下载速度的额外好处。"

我个人从来不会使用内置的浏览器下载工具下载任何内容,除非必须(例如Gmail附件)


一些想法:

  • 暴雪为其补丁程序使用了轻量级的.exe BitTorrentpackage器。我不完全确定它是如何完成的,但是它看起来像是官方BitTorrent客户端的品牌版本。
  • 上传到Amazon S3,提供文件的种子链接(所有S3文件均自动启用BitTorrent),以及完整的HTTP下载链接作为替代。请参阅S3文档

如果您不想内部编写Java代码,则可以使用商业applet解决方案:

  • 金库
  • MyDownloder

它们两个都有评估版本,您可以下载和测试。


看看cURL。本文介绍如何通过HTTP进行多部分同时下载。我过去曾使用cURL管理超过300GB的文件的FTP下载。

另一个提示:如果增加客户端NIC配置上TCP窗口的大小,则可以增加下载时间。将其设置为操作系统允许的最高值,根据您的物理网络,您应该看到最高2倍的改进。当通过WAN进行FTP传输时,这在Windows 2000和2003上对我有用。不利的一面是,它可能会增加所有其他网络流量的开销,这些流量仅需要一个网络数据包几个KB,但现在被迫以64KB数据包发送/接收。您的里程可能会有所不同。

编辑:您要完成的任务到底是什么?谁是观众?我假设您正在寻求通过自己的网络进行此操作;但您似乎暗示客户端是互联网上的某人。我认为我们需要更明确的要求。


There are some users that will be behind corporate firewalls that don't permit FTP...

是否有可能允许具有限制性防火墙的用户从您的网站安装和运行.exe文件?


上述applet方法的问题在于,除非最终用户修改其java安全属性,否则applet将无权保存到硬盘驱动器。

使用Java Web Start(又名JNLP)可能是可能的。我认为,如果它是已签名的应用程序,则可以获得写入硬盘的额外权限。这与下载exe方法没有太大不同。问题是用户必须安装正确版本的Java,并且必须正确设置Java Web Start功能。

我建议您使用exe方法,因为这对于非技术用户来说是最容易使用的方法。


我说的是单击一次安装的下载管理器,类似于msdn。

但是要在没有针对该工作的更优化协议的情况下成为CDN并非易事。我无法想象有一种商业模式值得拥有,足以将如此大的文件下载作为核心能力,除非您正在执行msdn之类的工作。如果创建一个胖客户端,至少有机会与用户进行广告或其他收入模式的交流,因为您可能会花费数十万美元来托管这样的服务。


@ceejayoz

我完全同意,但这是我们客户要求的一部分。可以进行FTP访问,但是每个用户都可以选择通过HTTP或FTP下载。有些用户将位于公司防火墙的后面,这些用户不允许FTP

过去我曾见过其他站点(MSDN,Adobe)这样做,所以我希望已经有了一些东西,而不必自己做一个(并学习Java和/或ActiveX)。


@jjnguy
我正在寻找可以为我做的Java小程序或ActiveX组件。这些是非技术用户,因此我们只希望让他们单击下载,然后将完整文件保存在指定位置


@levand
该问题仅在IE中存在(它在Firefox中有效),因此尽管ActiveX仅在IE上有效,但IE是我们唯一需要解决的问题。

@travis-有趣的主意。不知道它是否可以满足我的需要,但我会牢记在心。我希望找到可以与现有网站集成的东西,而不必去找第三方。它还需要我设置一个bittorrent跟踪器,它对这个应用程序来说听起来并不容易,因为不同的用户对不同的文件具有不同的访问权限。


@travis

不幸的是,它必须通过用户浏览器中的HTTP进行。
我将更新问题以使其更清楚。


推荐阅读