我正在开发一个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倍是很痛苦的.
Gautam.. 5
我最近在Silverlight中实现了一些功能.
基本上使用HttpWebRequest将一大块数据发送到GenericHandler.
在第一篇文章中,发送了4KB的数据.在第二块,我发送另一个4K块.
当收到第二个块时,我计算它在第一个和第二个块之间的往返行程,所以现在发送的第三个块将知道增加速度.
使用这种方法,我可以上传任何大小的文件,我可以恢复.
我发送的每个帖子都是这个信息:
[参数] [FILEDATA]
这里,参数包含以下内容:[Chunk#] [Filename] [Session ID]
收到每个块之后,我会向Silverlight发回一个回复,说明它的速度有多快,现在它可以发送更大的块.
很难在没有代码的情况下进行解释,但基本上我是这样做的.
在某些时候,我将快速撰写关于我如何做到这一点的文章.
我最近在Silverlight中实现了一些功能.
基本上使用HttpWebRequest将一大块数据发送到GenericHandler.
在第一篇文章中,发送了4KB的数据.在第二块,我发送另一个4K块.
当收到第二个块时,我计算它在第一个和第二个块之间的往返行程,所以现在发送的第三个块将知道增加速度.
使用这种方法,我可以上传任何大小的文件,我可以恢复.
我发送的每个帖子都是这个信息:
[参数] [FILEDATA]
这里,参数包含以下内容:[Chunk#] [Filename] [Session ID]
收到每个块之后,我会向Silverlight发回一个回复,说明它的速度有多快,现在它可以发送更大的块.
很难在没有代码的情况下进行解释,但基本上我是这样做的.
在某些时候,我将快速撰写关于我如何做到这一点的文章.
我从来没有将它用于2GB大小的文件,但YUI文件上传器在以前的项目上工作得很好.您可能也对此jQuery插件感兴趣.
也就是说,我仍然认为Java Applet是要走的路.我认为你最终会获得比预期更少的可移植性和UI问题,并且Drag/Drop工作得很好.为了记录,Box.net使用Java Applet进行多文件快速上传.