2010-03-31 37 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