关于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进行。
我将更新问题以使其更清楚。


推荐阅读

    linux分隔文件命令?

    linux分隔文件命令?,系统,信息,文件,命令,位置,指令,文件夹,目录,前缀,方法,l

    linux访问网站的命令?

    linux访问网站的命令?,地址,系统,服务,工作,网站,命令,网络,管理,信息,网址,L

    linux改文件权限命令?

    linux改文件权限命令?,系统,工具,档案,权限,文件,信息,命令,目录,选项,用户,

    linux命令交换文件名?

    linux命令交换文件名?,命令,文件,数据,名称,工具,地址,软件,系统,基础知识,

    linux下载安装包命令?

    linux下载安装包命令?,软件,系统,名称,位置,数据,名字,通讯,灵活,最新,管理,

    linux文件夹转移命令?

    linux文件夹转移命令?,系统,文件,命令,位置,材料,信息,工具,电脑,目录,源文

    linux转移文件命令?

    linux转移文件命令?,文件,命令,密码,电脑,位置,名称,信息,系统,目录,目标,lin

    linux下载步骤命令?

    linux下载步骤命令?,系统,软件,网络,电脑,官网,名称,管理,工具,位置,盘中,安

    linux下替换文件命令?

    linux下替换文件命令?,文件,一致,评论,名称,标的,资料,工作,命令,字符串,内

    linux文件nl命令?

    linux文件nl命令?,地址,工作,信息,系统,情况,标准,实时,对比,百度,命令,linux

    linux寻找文件夹命令?

    linux寻找文件夹命令?,名称,命令,文件,位置,工作,标准,目录,子目录,文件名,

    linux跳到文件尾命令?

    linux跳到文件尾命令?,系统,文件,命令,管理,状态,实时,末尾,光标,内容,编辑,l

    linux各种下载命令?

    linux各种下载命令?,软件,系统,网络,工具,代理,名称,中心,环境,百度,市场,Lin

    linux下载包的命令是?

    linux下载包的命令是?,软件,系统,工具,网络,平台,名称,服务,手机,位置,在线,

    linux把文件复制命令?

    linux把文件复制命令?,名字,文件,软件,系统,位置,目录,命令,源文件,目标,文

    linux文件夹合并命令?

    linux文件夹合并命令?,文件,对比,第一,下来,命令,文件夹,两个,字段,内容,数

    linux下文件创建命令?

    linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,

    linux命令行安装文件?

    linux命令行安装文件?,软件,官网,密码,中心,电脑,文件,命令,终端,指令,版本,L

    linux文件解包命令?

    linux文件解包命令?,系统,地址,命令,文件,管理,手机,数据,工具,标准,单位,lin