Как загрузить HttpResponse в файл?

мое приложение для android использует API, который отправляет составной HTTP-запрос. Я успешно получаю ответ так:

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

ответ-это содержимое файла электронной книги (обычно epub или mobi). Я хочу записать это в файл с указанным путем, давайте скажем " / sdcard / test.формат epub."

файл может быть до 20 Мб, поэтому ему нужно будет использовать какой-то поток, но я просто не могу обернуть вокруг него голову. Спасибо!

2 ответов


ну это простая задача, вам нужен WRITE_EXTERNAL_STORAGE разрешение использовать.. затем просто получить InputStream

InputStream is = response.getEntity().getContent();

создайте FileOutputStream

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();

Edit, проверьте наличие 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.pdf " (в Mac).

"FileToDownlod " находится в виде URL e.g"https://www.doesntexist.com/sample.pdf"

не паникуйте, так как вторая часть попросит объявить в предложении throws или поймать несколько исключений. Этот кусок кода был для конкретной цели, пожалуйста, настроить для ваши собственные потребности.