37

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

经典的 HTML 文件上传不是很好,因为您一次只能选择一个文件,并且在实际上传期间很难获得任何进度指示(我最终使用计时器刷新进度指示器并从服务器通过 AJAX 调用)。优点:它总是有效的。

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

  • 让它在 Mac Safari 和 Mac Firefox 上正常工作是一场噩梦(感谢 Liveconnect)
  • UI 并不完全是原生 UI,有些人注意到
  • 小程序没有应有的响应(可能是我的错,但对我来说一切正常)
  • HTTPS的 Java 类存在 bug UrlConnection,所以我使用 Apache 通用 HTTP 客户端进行实际的 HTTP 上传。这是一个相当大的包,会减慢 .jar 文件的下载速度
  • Apache 通用 HTTP 客户端有时无法通过代理
  • Java 运行时相当大

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

问题

如果您有以下要求:

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

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


编辑 :

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

9 回答 9

5

我最近在 Silverlight 中实现了一些东西。

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

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

当收到第二个块时,我会计算第一个块和第二个块之间的往返行程,所以现在发送的第三个块会知道提高速度。

使用这种方法,我可以上传任何大小的文件,并且可以继续。

我发送的每个帖子都包含以下信息:

[参数] [文件数据]

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

收到每个块后,我会向我的 Silverlight 发送回复,说明它需要多快,以便它现在可以发送更大的块。

没有代码很难解释我的解释,但这基本上就是我做的。

在某个时候,我会整理一篇关于我是如何做到这一点的快速文章。

于 2009-02-24T23:07:01.563 回答
5

我从未将它用于 2GB 大小的文件,但YUI 文件上传器在以前的项目中运行良好。您可能也对这个jQuery 插件感兴趣。

也就是说,我仍然认为 Java Applet 是要走的路。我认为您最终会遇到比您预期的更少的可移植性和 UI 问题,并且拖放效果很好。作为记录,Box.net 使用 Java Applet 进行多文件快速上传。

于 2009-02-24T23:14:31.153 回答
4

好的,这是我的看法

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

但 :

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

感谢所有的答案 !!

于 2009-02-27T16:33:38.783 回答
3

有许多免费的 Flash 组件具有很好的多文件上传功能。他们在服务器端使用带有 PHP(或其他)接收器的 ActionScripts FileReference 类。有些最近因 FP10 的推出而中断,但我确信swfupload会起作用 :)

希望这可以帮助!

于 2009-02-24T15:17:10.537 回答
2

这两个Jupload http://jupload.sourceforge.net/ 和 jumploader http://jumploader.com/怎么样

两者都是 java 小程序,但它们也都非常易于使用和实现。

于 2010-12-30T20:42:31.717 回答
1

谷歌齿轮呢?

于 2009-11-08T13:25:02.843 回答
0

有允许多文件上传的 HTTP/HTTPS 上传控件。 是 Telerik 的一个,我发现它是可靠的。最新版本似乎满足了您的大部分功能要求(如果不是全部的话)。

于 2009-02-24T15:16:35.407 回答
0

正如 Dave 已经指出的那样,您也可以使用 HTTP 表单上传多个文件,但是如果您打算使用超出 HTTP 和 Javascript 提供的东西,我会大力考虑使用 Flash。甚至还有一些预先存在的解决方案,例如MultiPowUpload,它提供了您正在寻找的许多功能。使用 Flash 客户端获取进度信息也比使用来自 Javascript 的 AJAX 调用更容易,因为您有更多的灵活性。

于 2009-02-24T15:19:57.020 回答
0

您可以查看 Apache Commons FileUpload 包。它允许您上传多个文件、监控上传进度等。您可以在这里找到更多信息:http:

//commons.apache.org/fileupload/
http://commons.apache.org/fileupload/using.html

祝你好运

于 2009-02-24T17:49:17.847 回答