我的 android 应用程序使用发送多部分 HTTP 请求的 API。我成功地得到这样的回应:
post.setEntity(multipartEntity.build());
HttpResponse response = client.execute(post);
响应是电子书文件(通常是 epub 或 mobi)的内容。我想将其写入具有指定路径的文件,让我们说“/sdcard/test.epub”。
文件可能高达 20MB,因此它需要使用某种流,但我无法理解它。谢谢!
嗯,这是一个简单的任务,你需要WRITE_EXTERNAL_STORAGE
使用权限..然后只需检索InputStream
InputStream is = response.getEntity().getContent();
创建文件输出流
FileOutputStream fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "test.epub"))
;
从 is 读取并用 fos 写入
int read = 0;
byte[] buffer = new byte[32768];
while( (read = is.read(buffer)) > 0) {
fos.write(buffer, 0, read);
}
fos.close();
is.close();
编辑,检查 tyoo
首先是方法:
public HttpResponse setHTTPConnection() throws IOException, NullPointerException, URISyntaxException {
HttpClient client = HttpClientBuilder.create().build();
HttpRequestBase requestMethod = new HttpGet();
requestMethod.setURI(new URI("***FileToDownlod***"));
BasicHttpContext localContext = new BasicHttpContext();
return client.execute(requestMethod, localContext);
}
其次是实际代码:
File downloadedFile = new File("filePathToSave");
HttpResponse fileToDownload = setHTTPConnection();
try {
FileUtils.copyInputStreamToFile(fileToDownload.getEntity().getContent(), downloadedFile);
} finally {
fileToDownload.getEntity().getContent().close();
}
请确保将“ filePathToSave ”更改为保存文件的位置,并将“ FileToDownlod ”更改为相应的下载位置。
“ filePathToSave ”是您要保存文件的位置,如果您选择将其保存在本地,那么您可以简单地指向桌面,但不要忘记为您的文件命名,例如“/Users/admin/Desktop/downloaded.txt”。 pdf”(在 Mac 中)。
“ FileToDownlod ”是 URL 的形式,例如“ https://www.doesntexist.com/sample.pdf ”
不要惊慌,因为第二部分会要求在 throws 子句中声明或捕获多个异常。这段代码用于特定目的,请根据您自己的需要进行定制。