@Filex
Начинающий разработчик.

Как распарсить ResponseEntity в java и получить файл с именем?

Необходимо загрузить файл с сервера. Файл формируется динамически, в зависимости от переданных параметров, у него меняется имя. Вот контроллер, который отдает файл:
@PostMapping(value = "/getFile")
    public ResponseEntity<Resource> getNotFoundProviderGoods(@RequestParam("id") long id) throws IOException {
        File file = new File(getFile(id));
        InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
        HttpHeaders headers = new HttpHeaders();
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName());

        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(file.length())
                .contentType(MediaType.parseMediaType("application/octet-stream"))
                .body(resource);

    }


Далее я получаю ResponseEntity, и не знаю, как извлечь данный файл с его именем...

CloseableHttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost("http://localhost:7587/getFile");
        httpPost.setHeader("X-CSRF-TOKEN", token);
        httpPost.setHeader("Cookie", cookie);
        HttpEntity reqEntity = MultipartEntityBuilder.create()
                .addTextBody("providerId", String.valueOf(id)).setCharset(Charset.forName("UTF-8"))
                .build();
        httpPost.setEntity(reqEntity);

        try (CloseableHttpResponse response = client.execute(httpPost)) {
            System.out.println(response);

            if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
              ........... // как распарсить response ?
            }


как распарсить response ?
  • Вопрос задан
  • 1358 просмотров
Решения вопроса 1
@Filex Автор вопроса
Начинающий разработчик.
Получилось следующим способом:

try (CloseableHttpResponse response = client.execute(httpPost)) {
            if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
                String fileName = response
                        .getHeaders("Content-Disposition")[0]
                        .getElements()[0]
                        .getParameterByName("filename")
                        .getValue();
                InputStream fis = response.getEntity().getContent();
                Files.copy(fis, new File(fileName).toPath(), StandardCopyOption.REPLACE_EXISTING);
                IOUtils.closeQuietly(fis);
            }
}


Если есть предложения по улучшению кода, буду рад их увидеть.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы