2013-08-16 53 views
2

我班的其中一個領域是文件名。 對於序列化,我打算寫Gson類型的適配器(實現JsonSerializer<MyClass>),它應該發送文件流。如何編寫GSON發送流的類型適配器?

問題是我不希望它讀取所有文件數據(流)並將其保存爲內存中的字符串,因爲內存大小有限(它是移動設備),我必須發送一些其他字段(filename下面FE),所以JSON應該是這樣的:

data: 
{ 
    filename:"filename.png" 
    filedata:"(base64 file data stream here)" 
} 

什麼是網絡發送的文件數據,在這種情況下,一個領域的最佳方式?

PS。網絡發送由Apache Http客戶端完成(如果有幫助的話)

回答

1

看來,在一個請求體內混合使用json和大型二進制數據似乎不是一個好的體系結構解決方案。人們可以使用HTTP多來代替:

HttpPost request = new HttpPost(url); 

    MultipartEntity multipartEntity = new MultipartEntity(); 
    request.setEntity(multipartEntity); 

    // body 
    try { 
     multipartEntity.addPart("json", new StringBody(body, "application/json", Charset.forName("utf-8"))); 
    } catch (UnsupportedEncodingException e) { 
     throw new ResourceLoadingException(e); 
    } 

    // files 
    for (int i=0; i<filespaths.size(); i++) { 
     String eachFilePath = filespaths.get(i); 
     File file = new File(eachFilePath); 
     multipartEntity.addPart("file" + String.valueOf(i), new FileBody(file)); 
    } 

什麼移動設備Android不支持多組織,但你可以很容易地(如果使用Maven或搖籃)爲它添加支持:

<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpmime</artifactId> 
    <version>4.2.5</version> 
</dependency> 
+0

優秀的,工作了我也是。 謝謝! – user1940676

相關問題