Spring 파일 다운로드
간략하게 파일 다운로드 컨트롤과 서비스단을 만들어보자.
소스
Controller
컨트롤러 부분이다.
간략하게 form 객체로 받아서 void를 하여, 직접 리턴은 없다.
// 파일 다운로드
@GetMapping("/file/{path}")
public void getFileDownload(HttpServletResponse response, @PathVariable String path) {
fileService.download(response, path);
}
Service
실제로 파일을 보내주는 부분이다.
response에 getOutputStream으로 파일 객체 넘겨준다.
// 다운로드
public void download(HttpServletResponse response, String path) {
String filePath = "C:/tmp/file";
String fileName = path.split("__")[1];
String orgPathFile = String.format("%s%s%s", filePath, File.separator, path);
try {
// 파일명에 띄어쓰기가 있을 경우 예외처리( -> _ 방지)
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
fileName = fileName.replaceAll("\\+", "%20");
byte[] files = FileUtils.readFileToByteArray(new File(orgPathFile));
response.setContentType("application/octet-stream");
response.setContentLength(files.length);
response.setHeader("Content-Disposition","attachment; fileName=\"" + fileName + "\";");
response.setHeader("Content-Transfer-Encoding","binary");
response.getOutputStream().write(files);
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
예제
다른 예제
스프링 서버단 업로드
스프링 서버단 다운로드
클라이언트 자바스크립트 Fetch 업로드
클라이언트 자바스크립트 Fetch 다운로드