如何将巨大(GB)文件上载到Web服务器

时间:2010-03-28 21:46:59

标签: web file-upload webserver

我正在创建一个我想上传大文件的应用程序。 以下是该应用程序试图实现的一些描述:

  1. 从用户的物理机创建vmdk文件(使用Vmware Converter工具,vmdk文件的大小可以是GB)。
  2. 将此vmdk文件上载到远程服务器
  3. 现在,在远程服务器上安装vmdk文件的目的是可访问性。
  4. 即。用户远离他的物理机器,以后可以通过webconsole登录,以及 从远程服务器上的vmdk实例化虚拟机
  5. 我认为这使得情况与普通文件上传(10-20MB文件上传)不同。

    rsync / scp / sftp可能有所帮助,但.. 这可以使用网络界面吗?

    如果没有,那么我是否需要为最终用户创建一个单独的客户端,以便有效地转换和上传他的文件?

    感谢任何帮助..

4 个答案:

答案 0 :(得分:6)

为此使用文件传输协议,而不是HTTP。如果连接中断,您需要一个可以在中间重新启动传输的协议。


BTW,我不是故意使用FTP。


我不是所有当前文件传输协议的专家(我一直是FTP专家,这就是我推荐它的原因)。

然而,在这种情况下,我认为你在假设你需要透明度时是偏离基础的。该系统的所有用户都已在其计算机上安装了VMWare Converter软件。我认为没有理由他们也没有你的小程序可以进行实际的上传。如果有一个转换器软件的API,那么你的程序可以自动完成整个过程 - 他们在回家之前运行你的程序,你的程序将转换为vmdk,然后上传它。

究竟使用哪种协议,我不知道。这可能需要一些实验。但是,如果协议的使用嵌入在您的小应用程序和服务中,那么您的用户将不需要知道您正在尝试哪些协议。您可以在了解更多内容时更改它们,特别是如果您以允许自动更新的形式分发小程序。

答案 1 :(得分:3)

如果您坚持使用Web界面,那么解决这个问题的唯一方法就是使用与签名的Java applet类似的东西(我不会说Flash或其他类似技术,但我确定他们'同样有能力。)

一旦你越过这个类似于applet的控制的门槛,你就可以更自由地做什么以及如何做事。

上传文件的HTTP本身并没有什么问题,只是通用浏览器对它来说是一个糟糕的客户端(没有可重启性,如上所述,只是一个限制)。

但是使用applet你可以选择你想要的任何协议,你可以限制上传,以便不会使客户端连接饱和,你可以重新启动,发送碎片,做校验和,等等。

您不需要专门用于此的整个网页,它可以是一个小组件。它甚至可以是一个不可见的组件(并通过JS解雇)。但关键因素是它必须是一个SIGNED组件。无符号组件无法与用户文件系统交互,因此您需要对组件进行签名。它可以是您自己的证书等。它遵循与普通Web证书类似的许多机制。

显然,客户端浏览器也需要支持您的applet技术。

答案 2 :(得分:2)

如果您能找到支持它的主机,Rsync将是理想的选择 它可以轻松重启,只重新传输文件中已更改的部分,如果这对你有用,并内置了使用ssh,压缩等选项。

它还可以确认远程副本与本地文件匹配而不传输大量数据

答案 3 :(得分:-2)

我会运行并行FTP流来加速这个过程......