원본 본문으로 이동하기

스프링 파일 업로드

박용서 - 서론 참고 : https://spring.io/guides/gs/uploading-files/ 이번에 서블릿으로 만든 사이트를 스프링으로 바꾸면서 파일업로드도 알아보게 되었습니다. - 옛날 서블릿은 직접 스트림 받아서 boundary 찾고 잘라서 처리해주다가 (물론 옛날에도 라이브러리는 다 있었습니다... 필자의 당시 취향이... 라이브러리가 있어도 만들어 쓰는 문제로..) Part 이후로 엄청편해졌는데... - 스프링은 그것보다 더 편합니다...!! 설정 # 파일당 크기 제한 spring.http.multipart.max-file-size: 128KB # 전체 요청 크기 제한 spring.http.multipart.max-request-size: 128KB 서블릿때랑 똑같습니다 : 파일당 / 전체요청 전체 요청을 약간 널널하게 잡고 자바스크립트로 파일 용량이 넘어가면 경고 해주는식으로 합니다. html 간단하게 만듭시다... <html> <body> <form method="POST" enctype="multipart/form-data" action="/test-upload"> <div> <input type="file" name="file" /> <input type="submit" value="Upload" /> </div> </form> </body> </html> 컨트롤러 // 테스트 업로드 페이지 : GET @RequestMapping(path = "/test-upload", method = RequestMethod.GET) String testUploadPage() { return "test-upload"; } // 업로드 처리 : POST @RequestMapping(path = "/test-upload", method = RequestMethod.POST) @ResponseBody // 와 MultipartFile 보고 멀티파트를 자동으로 인식하는구나!!! String testUpload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { try { // 디플로이 기준루트에 test-upload-path 폴더를 만들어줍니다. Files.copy(file.getInputStream(), Paths.get("test-upload-path", file.getOriginalFilename())); return "파일업로드 성공 : " + file.getOriginalFilename(); } catch (IOException | RuntimeException e) { logger.error("file upload fail", e); return "파일업로드 실패 로그 확인요망"; } } else { return "파일이 없음"; } } 주석의 내용처럼 디플로이 기준루트에 test-upload-path 폴더를 만들어줍니다. 실행하면 업로드 되는 것을 확인할 수 있습니다. (심각하게 간단합니다....;;;;;;;;) 추신 당연한거지만.. 예제라서 패스를 저렇게 잡았습니다. 최종저장은 디플로이 폴더 밖에 저장해야합니다. - 안그러면 디플로이 할때마다 증발하기 때문이죠. 가리사니의 경우 디플로이 안의 유저가 접근하지 못하는 폴더에 임시저장하고 파일을 확인 후 (확인이라는게 예를들어 이미지 확장자면 이미지파일이 맞는지 확인) 최종 디플로이 폴더 밖에 추출한 썸네일과 함께 저장합니다. - HTTP 스프링 자바