我正在开发一个网络应用程序。用户可以通过HTTP协议上传文件。可以选择使用经典的HTML文件上传控件或Java小程序上传文件。
经典的HTML文件上传不够好,因为只能选择一个文件,而且在实际上传过程中很难获得任何进度指示(最终我使用定时器刷新进度指示器,并通过AJAX调用从服务器获取数据来解决这个问题)。优点是:它总是有效的。
使用Java小程序可以做更多的事情:一次选择多个文件(甚至一个文件夹),压缩文件,获得真正的进度条,在小程序上拖放文件等……但是有几个缺点:
- 在Mac Safari和Mac Firefox上正确运行它非常困难(感谢Liveconnect)
- 界面不是完全原生界面,有些人会注意到这一点
- 小程序的响应不如应该(可能是我的错误,但我觉得一切都很正常)
- Java UrlConnection类存在一些HTTPS的bug,所以我使用Apache common HTTP客户端进行实际的HTTP上传。这是一个相当大的包,会减慢.jar文件的下载速度
- Apache common HTTP客户端有时候很难穿过代理
- Java运行时占用空间相当大
我一直在维护这个Java小程序,但现在我对所有的缺点感到厌烦了,正在考虑编写/购买一个全新的组件来上传这些文件。
问题
如果你有以下要求:
- 轻松从浏览器上传多个文件,通过HTTP或HTTPS
- 压缩文件以减少上传时间
- 上传应该在任何平台上都能工作,并具备原生UI
- 必须能够上传巨大的文件,至少达到2GB
- 你可以完全自主选择技术
你会选择哪种技术/组件?
编辑:
- 给组件拖放文件是一个非常好的附加功能。
- 看起来有很多与Flash Player相关的问题(swfupload已知问题)。适当的Mac支持和通过带验证的代理上传是我无法没有的选项。这可能会排除所有基于Flash的选项 :-(。
- 我排除了所有仅使用HTML/Javascript的选项,因为经典的HTML控件无法一次选择多个文件。在想要选择一个文件夹中的多个文件时,点击n次“浏览”按钮很麻烦。