gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:52:10 26 4
gpt4 key购买 nike

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

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

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

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

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

问题

如果您有以下要求:

  • 通过 HTTP 或 HTTPS 从浏览器轻松上传多个文件
  • 压缩文件以减少上传时间
  • 上传应该可以在任何平台上使用原生用户界面
  • 必须能够上传大文件,至少 2gb
  • 您对这项技术拥有全权委托(delegate)

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


编辑:

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

最佳答案

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

基本上使用 HttpWebRequest 向 GenericHandler 发送数据 block 。

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

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

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

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

[参数][文件数据]

这里,参数包含以下内容:[ block #][文件名][ session ID]

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

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

在某个时候,我会整理一下我是如何做到这一点的。

关于java - 从浏览器上传多个文件的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/582126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com