【问题标题】:Display % of upload done显示上传完成百分比
【发布时间】:2010-03-31 18:43:58
【问题描述】:

我有一个用于将文件上传到服务器的 java 小程序。 我想显示已发送数据的百分比,但是当我使用ObjectOutputStream.write() 时,它只是写入缓冲区,不会等到数据实际发送完毕。我怎样才能做到这一点。 也许我需要使用线程同步之类的。任何线索都会很有帮助。

【问题讨论】:

  • 查找执行此操作的现有代码。不要写你自己的

标签: java upload


【解决方案1】:

不要使用ObjectOutputStream。它用于编写序列化的 Java 对象,而不是用于编写原始二进制数据。它确实可能会阻塞流。而是直接写到 URL 连接的OutputStream

也就是说,代码看起来相当复杂。即使重读了几遍,眨了无数次的眼睛,我也无法正确理解。我建议您在Commons HttpClient 的帮助下根据multipart/form-data 编码发送这些文件。你可以找到here 一个基本的代码示例。您只需修改Part[] parts 以包含所有文件。另一端的 servlet 可以反过来使用Commons FileUpload 来解析multipart/form-data 请求。

要计算进度,我建议从Commons IO 中选择CountingOutputStream。只需将OutputStream 包裹起来并写入即可。

更新:如果您不喜欢将您的小程序与更多的 3rd 方库一起发布(我认为这是合理的),那么请查看 this code snippet(以及提到的原始问题为第一个链接)如何使用URLConnection 自己创建multipart/form-data 正文。

【讨论】:

  • 非常感谢。我知道代码很复杂。自从我得到这段代码并试图在其中制作一些新东西后,我还没有自己编写它。我会试试你的例子。顺便说一句,我只是想祝贺你的博客,因为它对我的 JSF 帮助很大!
  • 我实际上需要使用 ObjectOutputStream 因为我在我在这里展示的代码之前发送了一个 HashMap...
  • 谢谢。嗯,这就是ObjectOutputStream 的本质。它不能逐字节发送数据,它只能以块/对象的形式发送数据。要么接受它,要么放弃它,继续发送“正常”的 HTTP 多部分/表单数据请求。
【解决方案2】:

我正在寻找的实际上是:

setFixedLengthStreamingMode(int contentLength)

这可以防止任何内部缓冲,让我确切知道正在发送的数据量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2014-04-11
    • 2011-06-24
    • 1970-01-01
    相关资源
    最近更新 更多