【发布时间】:2016-10-18 08:52:07
【问题描述】:
我正在尝试使用多部分表单将文件上传到服务器。 自 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。
对于使用 API 23 及更高版本的 Android 进行多部分文件上传,是否有任何建议。我知道我可以包含 HTTP 遗留库,但由于它已被删除,我不想这样做。或者有什么办法可以提高 OkHttp 的性能?
【问题讨论】:
标签: android file-upload okhttp okhttp3