SpringBootのファイルをダウンロードするサンプルです。
(確認環境:Spring Boot 2.5,JDK 11)
目次
サンプル | ファイルをダウンロードする |
コントローラ(FileController.java) | |
画面(index.html) | |
設定ファイル(application.properties) | |
実行結果 |
ファイルをダウンロードする
ファイルをダウンロードする流れは、以下のとおりです。
1.画面でボタンをクリックして起動する。
2.コントローラが所定の位置にあるファイルをダウンロードします。
http://localhost:8765/でアクセスします。
githubにコードがあります。
https://github.com/ut23405/springboot/tree/master/springboot-filedownload
コントローラ(FileController.java)
package com.example.demo;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class FileController {
@GetMapping
String index(Model model) {
return "/index";
}
@PostMapping("/testDownload")
String download(HttpServletResponse response) {
try (OutputStream os = response.getOutputStream();) {
Path filePath = Paths.get("D:/test1/" + "test1.txt");
byte[] fb1 = Files.readAllBytes(filePath);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=test1.txt");
response.setContentLength(fb1.length);
os.write(fb1);
os.flush();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
17行目は、画面の初期表示です。
22行目は、ファイルダウンロードで使用するHttpServletResponseです。
26行目は、ダウンロードするファイルです。
test1.txtの箇所を変更すれば各種ファイルをダウンロードできます。
例:エクセルファイル(test1.xlsx)、PDFファイル(test1.pdf)等
28行目は、バイトに変換しています。
30~32行目は、レスポンスヘッダに値をセットしています。
application/octet-streamは、汎用的なバイナリデータを想定しています。
以下は、HttpServletResponseのJavaDocです。
https://spring.pleiades.io/specifications/platform/8/apidocs/javax/servlet/http/httpservletresponse
画面(index.html)
<!DOCTYPE html>
<html xmlns:th="https://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>download</title>
</head>
<body>
<form method="post" th:action="@{/testDownload}">
<input type="submit" value="ダウンロード" />
</form>
</body>
</html>
ボタンを押すとダウンロードします。
設定ファイル(application.properties)
server.port = 8765
ポート番号を変更しています。
実行結果
画面のボタンを押すとファイルがダウンロードされます。
レスポンスヘッダーにセットした値が表示されます。
関連の記事