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

时间:2009-02-24 15:11:48

标签: java flash silverlight http upload

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

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

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

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

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

问题

如果您有以下要求:

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

您会使用哪种技术/组件?


编辑:

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

10 个答案:

答案 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等时总是会出现错误...

  • flash uploader(一个la swfupload)非常轻量级,不需要用户授权,并且有一个非常酷的原生界面,我认为
  • java上传器需要授权,但您可以使用用户选择的文件执行任何操作(如果需要,也可以进行压缩),拖放效果很好。准备一些史诗般的错误debuggin'虽然。
  • 我没有改变玩Silverlight,只要我想也许这是真正的答案,虽然技术还很年轻所以...如果我有机会我会编辑这篇文章用Silverlight轻言一下

感谢所有答案!!

答案 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库教程:

GOJFileUpload

他们提供两种方法

  • UploadFile(String filepath,ArrayList imagenames,HttpRequest request)
  • UploadFile(String filepath,ArrayList dataname,ArrayList imagenames,HttpRequest request)

他们会将HashMap返回到您在指定目标文件夹中上传后上传的所有文件名。

相关问题