1. ホーム

[解決済み】springコントローラからファイルをダウンロードする方法

2022-04-15 23:49:08

質問

ウェブサイトからPDFをダウンロードする必要がある要件があります。PDFはコード内で生成する必要があり、freemarkerとiTextのようなPDF生成フレームワークの組み合わせになるかと思います。何か良い方法はありますか?

しかし、私の一番の問題は、Spring Controllerを通してユーザーがファイルをダウンロードできるようにするにはどうしたらいいかということです。

解決方法は?

@RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET)
public void getFile(
    @PathVariable("file_name") String fileName, 
    HttpServletResponse response) {
    try {
      // get your file as InputStream
      InputStream is = ...;
      // copy it to response's OutputStream
      org.apache.commons.io.IOUtils.copy(is, response.getOutputStream());
      response.flushBuffer();
    } catch (IOException ex) {
      log.info("Error writing file to output stream. Filename was '{}'", fileName, ex);
      throw new RuntimeException("IOError writing file to output stream");
    }

}

一般に response.getOutputStream() を使えば、何でも書けます。この出力ストリームは、生成されたPDFを置く場所としてジェネレータに渡すことができます。また、送信するファイルの種類がわかっている場合は、以下のように設定することができます。

response.setContentType("application/pdf");