7

我的 android 应用程序使用发送多部分 HTTP 请求的 API。我成功地得到这样的回应:

post.setEntity(multipartEntity.build());
HttpResponse response = client.execute(post);

响应是电子书文件(通常是 epub 或 mobi)的内容。我想将其写入具有指定路径的文件,让我们说“/sdcard/test.epub”。

文件可能高达 20MB,因此它需要使用某种流,但我无法理解它。谢谢!

4

2 回答 2

18

嗯,这是一个简单的任务,你需要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

于 2013-11-01T19:09:41.290 回答
0

首先是方法:

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 子句中声明或捕获多个异常。这段代码用于特定目的,请根据您自己的需要进行定制。

于 2018-09-27T04:25:47.400 回答