SpringBootにて、ファイルをダウンロードするユーティリティメソッドを作ったのでメモとして残します。
引数は、ダウンロード対象のファイルパス、出力ファイル名、HttpServletResponseです。
Controllerの引数でHttpServletResponseを読み込むことで、これを利用することができます。
/**
* ファイルダウンロード
*
* @param originFilePath ダウンロードファイルパス
* @param outputFileName 出力ファイル名
* @param response HttpServletResponse
*/
public static void downloadFile(String originFilePath, String outputFileName, HttpServletResponse response) {
String CONTENT_DISPOSITION_FORMAT = "attachment; filename=\"%s\"; filename*=UTF-8''%s";
outputFileName = String.format(CONTENT_DISPOSITION_FORMAT, outputFileName,
UriUtils.encode(outputFileName, StandardCharsets.UTF_8.name()));
try (OutputStream os = response.getOutputStream();) {
Path filePath = Path.of(originFilePath);
byte[] fb = Files.readAllBytes(filePath);
response.setContentType("application/octet-stream");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, outputFileName);
response.setContentLength(fb.length);
os.write(fb);
os.flush();
Files.delete(filePath);
} catch (IOException e) {
e.printStackTrace();
}
}