我班级的一个字段是文件名。
对于序列化,我将编写应发送文件流的Gson类型适配器(实现JsonSerializer<MyClass>
)。
问题是我不希望它读取所有文件数据(流)并将其保存为内存中的字符串,因为内存大小有限(它的移动设备),我必须发送一些其他字段({{ 1}} fe fe),所以json应该是这样的:
filename
在这种情况下,将网络中的文件数据作为字段发送的最佳方法是什么?
PS。网络发送由Apache Http Client完成,如果它有帮助
答案 0 :(得分:1)
在一个请求体中混合使用json和大型二进制数据似乎不是一个好的架构解决方案。可以使用http Multipart代替:
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不支持Multipart机构,但您可以轻松添加对它的支持(如果使用Maven或Gradle):
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.2.5</version>
</dependency>