在一个请求正文中混合 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>