2013-01-16 83 views
0

我使用httpclient上傳文件。上傳文件大小後更改。在文件上傳過程中,一些額外的東西被添加到文件中。上傳時文件大小增加

它包含上傳文件之前:

hi this is vipin check 

上傳後的文件包含:

--j9q7PmvnWSP9wKHHp2w_KCI4Q2jCniJvPbrE0 
Content-Disposition: form-data; name="vipin.txt"; filename="vipin.txt" 
Content-Type: application/octet-stream 
Content-Transfer-Encoding: binary 

hi this is vipin check 
--j9q7PmvnWSP9wKHHp2w_KCI4Q2jCniJvPbrE0-- 

爲什麼文件大小會發生改變? 爲什麼添加這些額外的內容?

我HttpClient的代碼是:

HttpPut httppost = new HttpPut(URIUtil.encodeQuery(newUrl)); 
httppost.setHeader("X-Auth-Token", cred.getAuthToken()); 
httppost.addHeader("User-Agent", "NetMagic-file-upload"); 
System.out.println("Dest : " + dest.getAbsolutePath()); 

MultipartEntity mpEntity = new MultipartEntity(); 
ContentBody cbFile = (ContentBody) new FileBody(src); 
mpEntity.addPart(dest.getName(), cbFile); 
httppost.setEntity(mpEntity); 
System.out.println("executing request " + httppost.getRequestLine()); 

HttpResponse response = httpclient.execute(httppost); 
+0

上傳時本地文件被修改了嗎?或者這是什麼到達服務器? – flup

回答

0

什麼似乎情況是,客戶端發送的文件上傳爲多實體,但服務器將其當作一個純文本文件。不清楚問題出在哪裏。

  • 服務器可能會忽略請求標頭中的內容類型。這很可能是servlet(或其他)負責處理上傳請求的錯誤。

  • 客戶端可能未在請求頭中設置內容類型。我本來期望客戶端庫會爲你照顧。但有可能你需要明確地做到這一點。

我想建議你看一看,因爲它們是由客戶端發送或接收的服務器,以查看是否有適當的多部分內容類型的請求頭。這將幫助您確定問題所在。


但有一個明顯的解決方案。如果服務器無法處理多部件,請將客戶端更改爲不發送它們。

+0

(問題在於請求方法(PUT)和多部分編碼的結合) –

0

您正在執行PUT請求,但您的客戶端使用多部分編碼作爲HTML表單帖子中的常用方法。

+0

AFAIK,HTTP規範中沒有什麼說你不能在PUT請求中執行此操作。相反,規範說服務器負責正確處理多部分內容類型...或拒絕PUT請求。 (但是,沒有證據表明正在發送適當的內容類型* ......) –

+0

這是事實。但是規範中也沒有說服務器除了存儲有效載荷(它所做的)之外應該做任何事情。 –

+0

我在快速存儲上傳文件 –