我正在尝试使用multipart表单将文件上传到服务器。 由于API 23 Android已弃用Apache HTTP库。
我转而使用OkHttp进行文件上传,如下所示:
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(name, fileName, requestBodyPart)
.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
而requestBodyPart
是:
requestBodyPart = new RequestBody() {
@Override
public MediaType contentType() {
return MediaType.parse(contentType);
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
try {
if (sink.writeAll(Okio.source(inputStream)) == 0) {
throw new IOException("Empty File!");
}
} finally {
MiscUtils.closeCloseable(inputStream);
}
}
};
然而,就文件上传而言,OkHttp似乎并不那么出色。很多超时并且似乎创建了几层抽象(源和接收器)并且在文件数据仍然通过套接字写入时触发了此AsyncTimeout。
是否有任何关于从Android开始使用API 23的多部分文件上传的建议。我知道我可以包含HTTP遗留库,但由于它已被删除,我宁愿不这样做。或者有没有办法可以提高OkHttp的性能?
答案 0 :(得分:0)
这应该有效
String name = ...
File file = ...
MediaType mediaType = MediaType.parse(...)
OkHttpClient httpClient = ...
Request request = new Request.Builder()
.url(url)
.post(new MultipartBuilder().type(MultipartBuilder.FORM)
.addFormDataPart(name,
file.getName(),
RequestBody.create(mediaType, file))
.build())
.build();
try {
Response response = httpClient.newCall(request).execute();
} catch (IOException e) {
// handle error
}