検証version: Spring Boot 1.3.5

日本語ファイル名のファイルをダウンロードするときのポイントは3点

  • 引数でHttpServletResponseを受け取る。
  • レスポンスヘッダにContent-Dispositionをつける。この時、URLエンコードしたファイル名の前にfilename*=UTF-8''をつける。
  • OutputStreamにファイルを書き込む。
@RequestMapping(value = "/download", method = RequestMethod.GET)
public String download(HttpServletResponse response) throws IOException {
    File file = new File("filepath");
    response.addHeader("Content-Type", "application/octet-stream");
    response.addHeader("Content-Disposition", "attachment; filename*=UTF-8''" + URLEncoder.encode(file.getName(), StandardCharsets.UTF_8.name()));

    Files.copy(file.toPath(), response.getOutputStream());
    return null;
}