스프링12_ResponseBody, 파일3 다운로드
@ResponseBody
@GetMapping("test")
@ResponseBody
// ResponseBody 로 리턴값이 클라이언트에 직접 줄 때, 화면에 보여줌
// + @Controller == @RestController : 메소드가 아닌 클래스에
public String test(HttpServletResponse response) throws IOException {
// response.getWriter().write("zzzzzzzzzz");
return "helloworld";
}
파일 다운로드
GalleryController
// 파일 다운로드 방법1) response로 처리
@GetMapping("down/{no}")
@ResponseBody
public void down(@PathVariable int no, HttpServletResponse response) throws IOException {
//{no}에 맞는 파일 정보를 가져오기
// Repository : db에 가서 no값으로 row 가져오기
GalleryVo g = galleryRepository.getGallery(no);
System.out.println(g);
if(g == null) {
//사용자가 없는 거 달라고 하면 에러
response.sendError(400);
}
//파일 정보(g) 가져온 걸 바탕으로 클라이언트한테 파일 전송
response.setHeader("Content-Type", "application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(g.getfName(), "UTF-8") + "\"");
response.setHeader("Content-Length", String.valueOf(g.getfSize()));
//파일전송
//서버 컴퓨터의 파일을 가져옴
File file = new File("D:\\uploadForSpring", String.valueOf(no));
//그 파일을 바이트로 변환
byte[] data = FileUtils.readFileToByteArray(file);
//data를 클라이언트에게 보내기
response.getOutputStream().write(data);
}
// 파일 다운로드 방법2) 스프링에서 ResponseEntity로 처리
// ResponseEntity == 응답 데이터 덩어리
@GetMapping("down/{no}")
public ResponseEntity down(@PathVariable int no) throws IOException {
//2-1) {no}에 맞는 파일 정보를 가져오기
// Repository : db에 가서 no값으로 row 가져오기
GalleryVo g = galleryRepository.getGallery(no);
System.out.println(g);
if(g == null) {
//파일 없을 때 == 사용자가 없는 거 달라고 하면 에러
return ResponseEntity.notFound().build(); //빌드패턴
}
//파일 있을 때
//2-2) 파일 전송
//파일 가져오기(서버 컴퓨터)
File file = new File("D:\\uploadForSpring", String.valueOf(no));
//파일을 바이트로 변환
byte[] data = FileUtils.readFileToByteArray(file);
//스프링이 원하는 타입인 ByteArrayResource 타입으로 맞추기
ByteArrayResource res = new ByteArrayResource(data);
//res(바이트 덩어리)를 ResponseEntity에 담아서 클라이언트에게 보내기
return ResponseEntity
.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.contentLength(g.getfSize())
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + URLEncoder.encode(g.getfName(), "UTF-8") + "\"")
.header(HttpHeaders.CONTENT_ENCODING, "UTF-8")
.body(res);
}
// 파일 다운로드 방법1) response로 처리
@GetMapping("down/{no}")
@ResponseBody
public void down(@PathVariable int no, HttpServletResponse response) throws IOException {
//{no}에 맞는 파일 정보를 가져오기
// Repository : db에 가서 no값으로 row 가져오기
GalleryVo g = galleryRepository.getGallery(no);
System.out.println(g);
if(g == null) {
//사용자가 없는 거 달라고 하면 에러
response.sendError(400);
}
//파일 정보(g) 가져온 걸 바탕으로 클라이언트한테 파일 전송
response.setHeader("Content-Type", "application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(g.getfName(), "UTF-8") + "\"");
response.setHeader("Content-Length", String.valueOf(g.getfSize()));
//파일전송
//서버 컴퓨터의 파일을 가져옴
File file = new File("D:\\uploadForSpring", String.valueOf(no));
//그 파일을 바이트로 변환
byte[] data = FileUtils.readFileToByteArray(file);
//data를 클라이언트에게 보내기
response.getOutputStream().write(data);
}
// 파일 다운로드 방법2) 스프링에서 ResponseEntity로 처리
// ResponseEntity == 응답 데이터 덩어리
@GetMapping("down/{no}")
public ResponseEntity down(@PathVariable int no) throws IOException {
//2-1) {no}에 맞는 파일 정보를 가져오기
// Repository : db에 가서 no값으로 row 가져오기
GalleryVo g = galleryRepository.getGallery(no);
System.out.println(g);
if(g == null) {
//파일 없을 때 == 사용자가 없는 거 달라고 하면 에러
return ResponseEntity.notFound().build(); //빌드패턴
}
//파일 있을 때
//2-2) 파일 전송
//파일 가져오기(서버 컴퓨터)
File file = new File("D:\\uploadForSpring", String.valueOf(no));
//파일을 바이트로 변환
byte[] data = FileUtils.readFileToByteArray(file);
//스프링이 원하는 타입인 ByteArrayResource 타입으로 맞추기
ByteArrayResource res = new ByteArrayResource(data);
//res(바이트 덩어리)를 ResponseEntity에 담아서 클라이언트에게 보내기
return ResponseEntity
.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.contentLength(g.getfSize())
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + URLEncoder.encode(g.getfName(), "UTF-8") + "\"")
.header(HttpHeaders.CONTENT_ENCODING, "UTF-8")
.body(res);
}
GalleryVo를 바탕으로 파일 전송
방법1) HttpServletResponse response로 처리
//header response.setHeader("Content-Type", "application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(파일이름, "UTF-8") + "\""); response.setHeader("Content-Length", String.valueOf(파일사이즈)); //바이트로 변환 //서버 컴퓨터의 파일을 가져옴 File file = new File("D:\\uploadForSpring", String.valueOf(no)); //그 파일을 바이트로 변환 byte[] data = FileUtils.readFileToByteArray(file); //data를 클라이언트에게 보내기 response.getOutputStream().write(data);
방법2) 스프링에서 ResponseEntity로 처리
//스프링이 원하는 타입인 ByteArrayResource 타입으로 맞추기 ByteArrayResource res = new ByteArrayResource(data); //res(바이트 덩어리)를 ResponseEntity에 담아서 클라이언트에게 보내기 return ResponseEntity .ok() .contentType(MediaType.APPLICATION_OCTET_STREAM) .contentLength(g.getfSize()) .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + URLEncoder.encode(g.getfName(), "UTF-8") + "\"") .header(HttpHeaders.CONTENT_ENCODING, "UTF-8") .body(res);
Author And Source
이 문제에 관하여(스프링12_ResponseBody, 파일3 다운로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lecharl/스프링12ResponseBody-파일3-다운로드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)