2015-06-30 43 views
4

我正在編寫一個嵌入式碼頭的服務器端應用程序,它接收來自第三方客戶端的一些請求。客戶端將一些小文件上傳到服務器。但是我驚訝地發現客戶端不會將文件數據上傳爲application/octet-stream,而是將json上載爲application/json,其中包含有關該文件的所有元數據,並將所有數據作爲字符串填充到字段中。對於簡單的例子將字符串轉換爲應用程序/八位字節流Java

{ 「_id」: 「果」, 「名稱」: 「果」, 「_shasum」: 「4954f1f8b4a8cbf9ea6b675face476f030cf7fbb」, 「壓縮包」:「HTTP://本地主機: 8585/fruit/-/fruit-2.0.0.tgz「, 」_attachments「:{ 」fruit-2.0.0.tgz「:{ 」content_type「:」application/octet-stream「, 」data「 : 「MF6/622swKoG0kbVvS8qCyF5r48CuyiCO60Mcl/LnOyufzAEZ5xxxhn/IT4DO4Fr4QAMAAA =」, 「長度」:545 }}}

現在的問題是我該如何將其轉換爲.tgz文件?我無法更改客戶端,所以我必須使用此工作。

+0

你無法轉換到文件中的字符串。您要麼嘗試接收錯誤的文件,要麼客戶端發生故障併發送錯誤的數據。 – Kayaman

+0

我不這麼認爲。當我上傳時,我只能得到一個請求,即我得到的數據。所以沒有錯誤的文件。當客戶端上傳數據時,我認爲客戶端也沒有損壞。同一個客戶端使用同樣的技術與它的deafult服務器一起工作 - 寫成是js。 – sadlil

+0

哦,沒錯,我錯過了base64編碼的數據。我以爲你在使用HTTP。那麼如果這是整個數據,你可以解碼並保存。你知道如何使用Base64,對吧? – Kayaman

回答

4

剛剛得到使用JSON解析器

byte[] decoded = Base64.getDecoder().decode(data); 
InputStream stream = new ByteArrayInputStream(decoded);