我正在开发一个Web应用程序。用户可以使用HTTP协议上传文件。经典的HTML文件上传控件和用于上传文件的Java小程序之间有一个选择。
经典的HTML文件上传不是很好,因为你一次只能选择一个文件,而且在实际上传过程中很难获得任何进度指示(我最终使用定时器刷新了数据进度指示器通过AJAX调用从服务器获取)。优势:它始终有效。
使用Java applet我可以做更多的事情:一次选择多个文件(甚至是文件夹),压缩文件,获得真正的进度条,在applet上拖放文件等等。 /> 但是有一些缺点:
UrlConnection
类中存在使用HTTPS的错误,因此我使用Apache通用HTTP客户端进行实际的HTTP上传。这是一个非常大的包,减慢了.jar文件的下载速度我一直在维护这个Java applet但现在我厌倦了所有的缺点,并考虑编写/购买一个全新的组件来上传这些文件。
问题
如果您有以下要求:
您会使用哪种技术/组件?
编辑:
答案 0 :(得分:5)
我最近在Silverlight中实现了一些东西。
基本上使用HttpWebRequest将一大块数据发送到GenericHandler。
在第一篇文章中,发送了4KB的数据。在第二个块上,我发送另一个4K块。
当收到第二个块时,我计算它在第一个和第二个块之间的往返,所以现在 发送时的第3个块将知道提高速度。
使用这种方法我可以上传任何大小的文件,我可以恢复。
我发送的每篇帖子都是这个信息:
[参数] [FILEDATA]
此处,参数包含以下内容: [块#] [文件名] [会议ID]
收到每个块后,我都会向Silverlight发回一个回复,说明它的速度有多快,现在它可以发送更大的 块。
很难在没有代码的情况下进行解释,但这基本上就是我的做法。
在某些时候,我会快速撰写关于我如何做到这一点的文章。
答案 1 :(得分:5)
我从未将它用于2GB大小的文件,但YUI File Uploader在以前的项目中运行良好。您可能也对此jQuery Plugin感兴趣。
那就是说,我仍然认为Java Applet是要走的路。我认为你最终会获得比预期更少的可移植性和UI问题,并且Drag / Drop工作得很好。为了记录,Box.net使用Java Applet进行多文件快速上传。
答案 2 :(得分:4)
好的,这是我对此的看法
我使用swfupload进行了一些测试,我之前有过Java的经验,我的结论是无论使用什么技术,都没有完美的解决方案来在浏览器上进行上传:你会在上传大文件,通过代理,使用ssl等时总是会出现错误...
但
感谢所有答案!!
答案 3 :(得分:3)
存在许多具有良好的多文件上载功能的免费闪存组件。他们在服务器端使用ActionScripts FileReference类和PHP(或其他)接收器。有些人最近打破了FP10的推出,但我肯定知道swfupload会起作用:)
希望这有帮助!
答案 4 :(得分:2)
这两个怎么样? Jupload http://jupload.sourceforge.net/ 和 jumploader http://jumploader.com/
两者都是java小程序,但它们也非常易于使用和实现。
答案 5 :(得分:1)
google gears怎么办?
答案 6 :(得分:0)
有HTTP / HTTPS上传控件允许多文件上传。 Here是Telerik的一个,我发现它是坚实可靠的。最新版本看起来具有大部分(如果不是全部)功能要求。
答案 7 :(得分:0)
你可以上传多个带有HTTP表格的文件,正如Dave已经指出的那样,但如果你开始使用超出HTTP和Javascript提供的东西,我会非常考虑Flash。甚至还有一些预先存在的解决方案,例如MultiPowUpload,它提供了许多您正在寻找的功能。使用Flash客户端比使用Javascript的AJAX调用更容易获取进度信息,因为您有更多的灵活性。
答案 8 :(得分:0)
您可以查看Apache Commons FileUpload包。它允许您上传多个文件,监控上传进度等。您可以在此处找到更多信息:
http://commons.apache.org/fileupload/
http://commons.apache.org/fileupload/using.html
祝你好运
答案 9 :(得分:0)
java中最简单的文件上传方式是GOJFileUpload.jar库
这是gojfileupload库教程:
他们提供两种方法
他们会将HashMap返回到您在指定目标文件夹中上传后上传的所有文件名。