Отправка файла при загрузке Spring

#java #spring #file

#java #весна #файл

Вопрос:

Я создаю приложение spring boot, которое отправляет файл в ответ на тело, для этого я использую этот код :

 FileSystemResource pdfFile = new FileSystemResource(outputFile);

return ResponseEntity
       .ok()
       .contentLength(pdfFile.contentLength())
       .contentType(MediaType.parseMediaType("application/pdf"))
       .body(new ByteArrayResource(IOUtils.toByteArray(pdfFile.getInputStream())));
  

Мне интересно, есть ли какой-либо альтернативный способ отправки файла, кроме использования FileSystemResource?

Пожалуйста, если есть какие-либо предложения, не стесняйтесь.

Спасибо!

Ответ №1:

Это упрощенная версия того, как я обычно это делаю, но она делает практически то же самое:

 @RequestMapping(method = RequestMethod.GET, value = "/{id}")
public ResponseEntity<byte[]> getPdf(@PathVariable Long id) throws IOException {
    final String filePath = pdfFilePathFinder.find(id);

    final byte[] pdfBytes = Files.readAllBytes(Paths.get(filePath));

    final HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.parseMediaType("application/pdf"));
    headers.setContentDispositionFormData("attachment", null);
    headers.setCacheControl("no-cache");

    return new ResponseEntity<>(pdfBytes, headers, HttpStatus.OK);
}
  

Комментарии:

1. У меня есть вопрос в этой инструкции: < последний байт[] pdfBytes = Files.ReadAllBytes(Paths.get(filePath));> » путь к файлу» — это абсолютный или относительный путь?

2. Абсолютный. Я не знаю, работает ли он также с относительными путями, но в любом случае есть способы создать Path s из ресурсов classpath, которые вы затем можете отправить Files#readAllBytes . Но это уже другая тема, на которую уже отвечали в другом месте.