SpringBoot ファイルをダウンロードするサンプル
構文
1.アノテーション@PostMapping(“/パス名")
HTTP POST リクエストを特定のハンドラーメソッドにマッピングするためのアノテーション。
2.インターフェース HttpServletResponse
public interface HttpServletResponse extends ServletResponse
ServletResponse インターフェースを拡張して、レスポンスを送信する際に HTTP 固有の機能を提供します。
3.getOutputStream
ServletOutputStream getOutputStream()
レスポンスにバイナリデータを書き込むのに適した ServletOutputStream を返します。 サーブレットコンテナーはバイナリデータをエンコードしません。
4.void setContentType(String type)
レスポンスがまだコミットされていない場合、クライアントに送信されるレスポンスのコンテンツタイプを設定します。
操作方法
1.コントローラ側(FileDownloadController.java)
package com.arkgame.study.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 FileDownloadController { @GetMapping String index(Model model) { return "/index"; } @PostMapping("/fileDownload") String download(HttpServletResponse response) { try (OutputStream os = response.getOutputStream();) { //ダウンロードファイル Path filePath = Paths.get("C:/backup/" + "result.pdf"); //バイトに変換 byte[] filebyte = Files.readAllBytes(filePath); //レスポンスヘッダに値をセット response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=result.pdf"); response.setContentLength(filebyte.length); os.write(filebyte); os.flush(); } catch (IOException e) { e.printStackTrace(); } return null; } }
2.画面(index.html)
<!DOCTYPE html> <html xmlns:th="https://thymeleaf.org"> <head> <meta charset="UTF-8"> <title>ファイルダウンロードサンプル</title> </head> <body> <form method="post" th:action="@{/fileDownload}"> <input type="submit" value="ダウンロード" /> </form> </body> </html>
「ダウンロード」ボタンを押すと、ファイルをダウンロードします。
3.設定ファイル(application.properties)
server.port = 8768
ポート番号を変更しています。