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

2022-09-01 05:29:05

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

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

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

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

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

问题

如果您有以下要求:

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

您将使用什么技术/组件?


编辑:

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

答案 1

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

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

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

当收到第二个区块时,我计算了第一个和第二个区块之间的往返行程,因此现在发送时的第3个区块将知道提高速度。

使用这种方法,我可以上传任何大小的文件,我可以恢复。

我发送的每个帖子都带有以下信息:

[参数][文件数据]

此处,参数包含以下内容:[块 #] [文件名] [会话 ID]

收到每个区块后,我会向我的 Silverlight 发送一个响应,说明它需要多快才能发送更大的区块。

很难在没有代码的情况下进行解释,但基本上这就是我的方式。

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


答案 2

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

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


推荐