大文件下载

时间:2008-08-29 20:34:36

标签: java flash silverlight browser large-files

Internet Explorer的文件下载限制为4GB(IE6上为2 GB)。 Firefox没有这个问题(还没有测试过safari) (更多信息:http://support.microsoft.com/kb/298618

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

在不使用FTP的情况下 的最佳方式是什么?最终用户必须能够使用HTTP从浏览器下载文件。我不认为Flash或Silverlight可以将文件保存到客户端,所以据我所知它们不会削减它。

我猜我们需要一个ActiveX或Java applet来解决这个问题。类似于MSDN使用的下载管理器。

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

更新:以下是一些其他信息,以帮助澄清我正在尝试做的事情。大多数4GB限制以上的文件都是大型高清视频文件(适用于视频编辑公司)。这些将由用户通过互联网下载,这不会是本地网络上的人。我们希望文件可以通过HTTP获得(一些用户将会在防火墙之后,不允许使用FTP,Bittorrent等)。这将是最终用户可以下载的文件库,因此我们不是在谈论一次性的大型下载。这将是半定期下载不同的大文件。

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

最好的解决方案是java applet或ActiveX组件,因为这个问题只存在于IE中,就像@spoulson链接的文章一样。但是,到目前为止,我还没有找到解决方案做任何事情(多部分下载,简历等)。

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

15 个答案:

答案 0 :(得分:7)

@levand:

  

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

这对很多很多网站来说都是一个破坏者。用户或者应该非常不愿意从网站下载.exe文件并且不知不觉地运行它们。即使他们并不总是那么谨慎,但我们应该鼓励作为负责任的开发人员,不谨慎的行为

如果您正在处理公司内部网的某些事情,那么.exe可能是一个好的解决方案,但对于公共网络?没办法。

@TonyB:

  

不使用FTP,最好的方法是什么。

对不起,但我不得不问为什么要求。你的问题告诉我的是“在没有任何肉类或热源的情况下煮牛排的最佳方法是什么?”对于这类事情,FTP是设计的

答案 1 :(得分:6)

bittorrent

已经有一些基于网络的版本(bitletw3btorrent),而Azureus是使用java构建的,所以它绝对可能。

编辑:@TonyB仅限于端口80?

答案 2 :(得分:4)

请不要使用ActiveX ...我对那些只能在IE中查看的网站感到厌烦。

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

答案 3 :(得分:2)

您可以将文件拆分成碎片,然后在下载后重新加入吗?

答案 4 :(得分:1)

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

它们都有eval版本,您可以下载和测试。

答案 5 :(得分:1)

一些想法:

  • 暴雪使用轻量级的.exe BitTorrent包装器作为补丁。我不完全确定它是如何完成的,但它看起来像官方BitTorrent客户端的品牌版本。
  • 上传到Amazon S3,提供该文件的torrent链接(所有S3文件都自动启用BitTorrent),以及完整的HTTP下载链接作为替代。 See S3 documentation

答案 6 :(得分:1)

如何说“我们建议您安装Free Download Manager以下载此文件。您可以享受恢复文件和加速下载的额外好处。”

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

答案 7 :(得分:0)

@travis

不幸的是,它必须在用户浏览器中通过HTTP。 我会更新问题,以便更清楚。

答案 8 :(得分:0)

@levand 这个问题只存在于IE中(它适用于Firefox),因此虽然ActiveX只适用于IE,但IE是我们唯一需要解决的问题。

@travis - 有趣的想法。不确定它是否适用于我需要的东西,但我会记住它。我希望能找到与现有网站集成的东西,而不必去第三方。它还需要我设置一个bittorrent跟踪器,这对于这个应用程序来说不会像听起来那么容易,因为不同的用户将拥有对不同文件的不同访问权。

答案 9 :(得分:0)

@jjnguy 我正在寻找一个java applet或ActiveX组件,它将为我做这件事。这些是非技术用户,所以我们真的只想让他们点击下载,完整的文件最终会在指定的位置

答案 10 :(得分:0)

@ceejayoz

我完全同意,但它是我们客户要求的一部分。将有FTP访问,但每个用户可以选择通过HTTP或FTP下载。有些用户将支持不允许使用FTP的企业防火墙

我见过其他网站过去(MSDN,Adobe),所以我希望有一些东西已经存在,而不是必须在内部制作(并学习java和/或ActiveX)

答案 11 :(得分:0)

我说click-once安装的下载管理器,类似于msdn。

但是,如果没有更优化的协议来成为CDN并非易事。我无法想象一个商业模式,除非你做像msdn这样的事情,否则有足够的商业模式可以将这么大的文件下载作为核心竞争力。如果您创建一个胖客户端,您至少有机会与用户,广告或其他一些收入模式获得更多的面对面时间,因为您可能需要支付数十万美元才能托管此类服务。

答案 12 :(得分:0)

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

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

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

答案 13 :(得分:0)

  

有些用户将在不允许FTP的公司防火墙后面......

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

答案 14 :(得分:0)

看看cURLThis article描述了如何通过HTTP进行多部分同时下载。我过去曾使用过cURL来管理超过300GB的文件的FTP下载。

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

编辑:你究竟想要完成的是什么?谁是观众?我有点想你想在你自己的网络上做这件事;但你似乎暗示客户端是互联网上的某个人。我认为我们需要更清晰的要求。