2010-03-31 33 views
1

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

+1

寻找这样做的现有代码。不要写你自己的 – Pyrolistical 2010-03-31 18:56:00

回答

1

我一直在寻找的竟是:

setFixedLengthStreamingMode(int contentLength) 

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

4

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

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

要计算进度,我建议选择的CountingOutputStream。只需用它包装OutputStream并写入它。

更新:,如果你不喜欢船与更多的第三方库的小程序(我想象是合理的),然后看看this code snippet(和第一个链接中提到的原来的问题)如何创建一个multipart/form-data身体使用URLConnection

+0

非常感谢。我知道代码很复杂。我自己并没有写这个,因为我刚刚得到了这段代码,并且正在尝试制作一些新的东西。我会试一试你的例子。顺便说一句,我只是想在你的博客上向你表示祝贺,因为它对JSF帮助很大! – user295744 2010-04-01 09:03:32

+0

我实际上需要使用ObjectOutputStream,因为我在这里给出的代码之前发送了一个HashMap ... – user295744 2010-04-01 09:38:20

+0

谢谢。那么这就是ObjectOutputStream的本质。它不能逐字节发送数据,它只能以块/对象发送数据。要么与它共存,要么放弃它,然后发送一个“正常的”HTTP多部分/表单数据请求。 – BalusC 2010-04-01 12:17:44