从浏览器上传多个文件的最佳方式

Séb*_*mer 36 java flash silverlight upload http

我正在开发一个Web应用程序.用户可以使用HTTP协议上传文件.经典的HTML文件上传控件和用于上传文件的Java小程序之间有一个选择.

经典的HTML文件上传不是很好,因为你一次只能选择一个文件,而且在实际上传过程中很难获得任何进度指示(我最终使用定时器刷新了一个进度指示器,其中包含从中获取的数据)服务器通过AJAX调用).优点:它始终有效.

使用Java applet,我可以做更多的事情:一次选择多个文件(甚至是文件夹),压缩文件,获得真正的进度条,在applet上拖放文件等等......
但是有一些缺点:

  • 让它在Mac Safari和Mac Firefox上正常工作是一场噩梦(感谢Liveconnect)
  • 用户界面并不完全是原生用户界面,有些人会注意到这一点
  • 小程序没有应有的响应(可能是我的错,但一切看起来都不错)
  • UrlConnection使用HTTPS 的Java 类中存在错误,因此我使用Apache通用HTTP客户端来执行实际的HTTP上载.这是一个非常大的包,减慢了.jar文件的下载速度
  • Apache公共HTTP客户端有时会遇到代理问题
  • Java运行时非常大

我一直在维护这个Java applet但是现在我已经厌倦了所有的缺点,并考虑编写/购买一个全新的组件来上传这些文件.

如果您有以下要求:

  • 通过HTTP或HTTPS轻松地从浏览器上传多个文件
  • 压缩文件以减少上传时间
  • 上传应该可以在任何平台上使用本机UI
  • 必须能够上传大文件,至少2gb
  • 你对这项技术有全权委托

你会使用什么技术/组件?


编辑:

  • 拖放组件上的文件将是一个很好的加分.
  • 看起来有很多与Flash Player的错误有关的问题(swfupload已知问题).适当的Mac支持和通过身份验证的代理上传是我不能没有的选择.这可能会排除所有基于Flash的选项:-(.
  • 我排除了所有HTML/Javascript选项,因为您不能使用经典HTML控件一次选择多个文件.当您想要选择文件夹中的多个文件时,单击"浏览"按钮的n倍是很痛苦的.

Gau*_*tam 5

我最近在Silverlight中实现了一些功能.

基本上使用HttpWebRequest将一大块数据发送到GenericHandler.

在第一篇文章中,发送了4KB的数据.在第二块,我发送另一个4K块.

当收到第二个块时,我计算它在第一个和第二个块之间的往返行程,所以现在发送的第三个块将知道增加速度.

使用这种方法,我可以上传任何大小的文件,我可以恢复.

我发送的每个帖子都是这个信息:

[参数] [FILEDATA]

这里,参数包含以下内容:[Chunk#] [Filename] [Session ID]

收到每个块之后,我会向Silverlight发回一个回复,说明它的速度有多快,现在它可以发送更大的块.

很难在没有代码的情况下进行解释,但基本上我是这样做的.

在某些时候,我将快速撰写关于我如何做到这一点的文章.


slf*_*slf 5

我从来没有将它用于2GB大小的文件,但YUI文件上传器在以前的项目上工作得很好.您可能也对此jQuery插件感兴趣.

也就是说,我仍然认为Java Applet是要走的路.我认为你最终会获得比预期更少的可移植性和UI问题,并且Drag/Drop工作得很好.为了记录,Box.net使用Java Applet进行多文件快速上传.


Séb*_*mer 3

好的,这是我对此的看法

我用 swfupload 做了一些测试,我以前有使用 Java 的经验,我的结论是,无论使用什么技术,都没有完美的解决方案在浏览器上进行上传:上传大文件时总会遇到错误,通过代理、ssl 等...

但 :

  • 我认为 Flash 上传器(la swfupload)非常轻量级,不需要用户授权,并且有一个非常酷的本机界面
  • java上传器需要授权,但您可以对用户选择的文件执行任何您想要的操作(如果需要,也称为压缩),并且拖放效果很好。不过,请为一些史诗般的错误调试做好准备。
  • 只要我愿意,我就没有改变使用 Silverlight 的方式,也许这就是真正的答案,尽管这项技术还很年轻,所以......如果我有机会稍微摆弄一下,我会编辑这篇文章与银光

感谢所有的答案 !!