在服务器端处理非常大的http上传和下载的最佳方法

Séb*_*mer 4 upload file-upload web-applications large-file-upload

我有一个即将到来的项目,我需要处理来自浏览器的非常大的上传(经典输入类型="文件"或Java小程序),并寻找在服务器上完成工作的最佳工具.

论文是我需要的东西:

  • 服务器上的内存消耗很低
  • 能够将文件保存在服务器上的最终目的地(不复制文件)
  • 没有阻止网络服务器完成的其他重要任务
  • 处理高达2 GB的文件
  • 文件授权(权限将在应用程序中给出)

我仍然对使用什么技术有一定的自由度,所以我想提出一些建议,以便能够选择服务器上的最佳技术来处理这项任务:

  • ASP.NET?
  • Java?
  • 亚马逊S3?
  • 其他选择?

我更习惯微软堆栈,但愿意在必要时改变:如上所述,我只是在找工作的最佳工具.

谢谢 !

更新: 服务器端是我对此问题非常感兴趣的部分,而不是客户端.

看起来它可能是微不足道的,但是当你开始挖掘时,你会看到.NET的4 Mb限制,使用大量内存的下载,可以阻止其他线程(当你对线程数有限制时,如果一个线程可以通过互联网在2 Gb文件上传/下载期间执行:那么这不会很好地扩展,是吗?)等等.

Rub*_*ias 6

你需要:

  • 客户端代码(Java Applet,Silverlight等)以小块破坏文件
  • 用于构建这些文件的服务器端代码(ASP.NET,Java,无关紧要)

我刚刚完成了一个应用程序正是这样; 我使用Silverlight(WebRequest异步),ASP.NET(IHttpHandler/ IHttpAsyncHandler)和SQL Server 2005(UPDATETEXT/ READTEXT)进行文件存储.

更新:关于ASP.NET服务器端代码:

ASP.NET默认配置将允许每个处理器100个线程; IHttpAsyncHandler不会阻止您的过程,您可以直接将文件内容写入context.Response.OutputStream.

对于上传,您还将发送多个数据块,但是在多个HTTP连接中; 虽然这可能会导致一些过热的HTTP标头,但在我的测试中效果很好.