从 OKHTTP 下载二进制文件 [英] Download binary file from OKHTTP
问题描述
我在我的 android 应用程序中使用 OKHTTP 客户端进行网络连接.
I am using OKHTTP client for networking in my android application.
这个示例展示了如何上传二进制文件.我想知道如何使用OKHTTP客户端获取下载二进制文件的输入流.
This example shows how to upload binary file. I would like to know how to get inputstream of binary file downloading with OKHTTP client.
这是示例的列表:
public class InputStreamRequestBody extends RequestBody {
private InputStream inputStream;
private MediaType mediaType;
public static RequestBody create(final MediaType mediaType,
final InputStream inputStream) {
return new InputStreamRequestBody(inputStream, mediaType);
}
private InputStreamRequestBody(InputStream inputStream, MediaType mediaType) {
this.inputStream = inputStream;
this.mediaType = mediaType;
}
@Override
public MediaType contentType() {
return mediaType;
}
@Override
public long contentLength() {
try {
return inputStream.available();
} catch (IOException e) {
return 0;
}
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
Source source = null;
try {
source = Okio.source(inputStream);
sink.writeAll(source);
} finally {
Util.closeQuietly(source);
}
}
}
简单获取请求的当前代码是:
Current code for simple get request is:
OkHttpClient client = new OkHttpClient();
request = new Request.Builder().url("URL string here")
.addHeader("X-CSRFToken", csrftoken)
.addHeader("Content-Type", "application/json")
.build();
response = getClient().newCall(request).execute();
现在如何将响应转换为 InputStream
.类似于来自 Apache HTTP Client
的响应,例如 OkHttp
响应:
Now how do I convert the response to InputStream
. Something similar to response from Apache HTTP Client
like this for OkHttp
response:
InputStream is = response.getEntity().getContent();
编辑
接受下面的回答.我修改后的代码:
EDIT
Accepted answer from below. My modified code:
request = new Request.Builder().url(urlString).build();
response = getClient().newCall(request).execute();
InputStream is = response.body().byteStream();
BufferedInputStream input = new BufferedInputStream(is);
OutputStream output = new FileOutputStream(file);
byte[] data = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
推荐答案
从 OKHTTP 获取 ByteStream
我一直在研究 OkHttp 的文档,你需要走这条路
I've been digging around in the Documentation of OkHttp you need to go this way
使用这个方法:
response.body().byteStream() 将返回一个 InputStream
response.body().byteStream() wich will return an InputStream
所以你可以简单地使用 BufferedReader 或任何其他替代品
OkHttpClient client = new OkHttpClient();
request = new Request.Builder().url("URL string here")
.addHeader("X-CSRFToken", csrftoken)
.addHeader("Content-Type", "application/json")
.build();
response = getClient().newCall(request).execute();
InputStream in = response.body().byteStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String result, line = reader.readLine();
result = line;
while((line = reader.readLine()) != null) {
result += line;
}
System.out.println(result);
response.body().close();
这篇关于从 OKHTTP 下载二进制文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!