2015-09-21 107 views
1

我送從我的客戶端上傳請求到我的服務器這樣的部分真正的內容類型:如何知道什麼是多要求

FileBody file2 = new FileBody(new File("./test2.txt")); 
FileBody image1 = new FileBody(new File("./DSC_0064.JPG")); 

,正如你看到的,其中一個文件是TXT和一個JPG圖片。

在服務器上,我收到請求和我走的標題爲每個部分,我得到這個:

------------Part 1------------ 
content-disposition=form-data; name="test2"; filename="test2.txt" 
content-type=application/octet-stream 
content-transfer-encoding=binary 
------------Part 2------------ 
content-disposition=form-data; name="image1"; filename="DSC_0064.JPG" 
content-type=application/octet-stream 
content-transfer-encoding=binary 

正如你看到的,對他們倆的內容類型是application/octet-stream。如何在動態環境中確定實際類型?這是一個圖像嗎?一個文本?一段錄像?

我不能依賴文件名,因爲用戶可以將其從例如txt更改爲PNG,然後我的服務器會認爲它是一個圖像,但他會因此而例外。

+2

有沒有真正的方法來找出答案。文件擴展名正是爲了這個目的。文件以字節爲單位後,可以是文本,壓縮數據,圖像,歌曲等。您可以執行的操作是捕獲錯誤並忽略該文件。你甚至可以在客戶端做到這一點,所以服務器沒有得到很多垃圾 – BlueMoon93

回答

2

這是因爲您沒有設置MIME類型。你可以使用其他構造函數FileBody(file, contentType),它需要一個內容類型:

FileBody file2 = new FileBody(new File("./test2.txt"), ContentType.TEXT_PLAIN); 
FileBody image1 = new FileBody(new File("./DSC_0064.JPG"), ContentType.create("image/jpeg")); 
+0

讓我測試你並返回 –

+0

請等待,在'create'方法中,也許客戶端寫什麼?像'ContentType.create(「不再MIME類型」)'?? –