Blog

[Spring][iLanD] MVP - [File] 파일 업로드 API 레퍼런스 탐색

Category
Author
Tags
PinOnMain
1 more property
참고자료

스프링 부트 파일 업로드 / 파일 다운로드

MultipartFile 클래스 사용
의존성 필요 없음
application.properties 파일에서 파일 최대 크기만 설정
자동으로 MultipartConfigElement 클래스를 빈으로 등록
파일명 중복되지 않도록 UUID 사용
소프트웨어 구축에 사용되는 식별자 표준
16 옥텟(128바이트)의 수
표준 형식에서 UUID는 32개의 16진수로 표현되며 총36개 문자(32개 문자와 4개의 하이픈)로 된 8-4-4-4-12라는 5개의 그룹을 하이픈으로 구분
자바 UUID 클래스의 randomUUID() 메소드를 사용해서 유일한 식별자 생성

스프링 부트 프로젝트에서 파일 업로드 / 다운로드 예제

파일 업로드

파일명 중복되지 않도록 파일 이름 변경해서 업로드
한 번에 여러 개의 파일 업로드
원본 파일명 그대로 업로드

파일 다운로드

폴더 내 파일 목록에서 선택해서 다운로드

파일 업로드 예제 1

파일명 중복되지 않도록 파일 이름 변경해서 업로드
// FileUploadController.java// 파일 업로드 처리 (파일명 중복되지 않도록 파일 이름 변경해서 업로드)@RequestMapping("/upload/fileUpload") public String fileUpload(@RequestParam("uploadFile") MultipartFile file, Model model) throws IOException { String savedFileName = ""; // 1. 파일 저장 경로 설정 : 실제 서비스되는 위치(프로젝트 외부에 저장) String uploadPath = "/Users/gobyeongchae/Desktop/UploadServerFile/"; // 2. 원본 파일 이름 알아오기 String originalFileName = file.getOriginalFilename(); // 3. 파일 이름 중복되지 않게 이름 변경(서버에 저장할 이름) UUID 사용 UUID uuid = UUID.randomUUID(); savedFileName = uuid.toString() + "_" + originalFileName; // 4. 파일 생성 File file1 = new File(uploadPath + savedFileName); // 5. 서버로 전송 file.transferTo(file1); // model로 저장 model.addAttribute("originalFileName", originalFileName); return"upload/fileUploadResult"; }
Java
복사
<!-- fileUploadForm.jsp --><body> <h3>파일 업로드</h3> <form id="fileUploadForm" method="post" action="/upload/fileUpload" enctype="multipart/form-data"> 파일 : <input type="file" id="uploadFile" name="uploadFile"><br><br> <input type="submit" value="업로드"> </form> </body>
XML
복사
<!-- fileUploadResult.jsp --><body> ${originalFileName} 파일을 업로드 하였습니다.<br> (서버에만 출력) Users/gobyeongchae/Desktop/UploadServerFile 확인 </body>
XML
복사

파일 업로드 예제 2

여러 개 파일 업로드
// FileUploadController.java// 여러 개의 파일 업로드@RequestMapping("/upload/fileUploadMultiple") public String fileUploadMultiple(@RequestParam("uploadFileMulti") ArrayList<MultipartFile> files, Model model) throws IOException { String savedFileName = ""; // 1. 파일 저장 경로 설정 : 실제 서비스되는 위치(프로젝트 외부에 저장) String uploadPath = "/Users/gobyeongchae/Desktop/UploadServerFile/"; // 여러 개의 원본 파일을 저장할 리스트 생성 ArrayList<String> originalFileNameList = new ArrayList<String>(); for(MultipartFile file : files) { // 2. 원본 파일 이름 알아오기 String originalFileName = file.getOriginalFilename(); // 3. 파일 이름을 리스트에 추가 originalFileNameList.add(originalFileName); // 4. 파일 이름 중복되지 않게 이름 변경(서버에 저장할 이름) UUID 사용 UUID uuid = UUID.randomUUID(); savedFileName = uuid.toString() + "_" + originalFileName; // 5. 파일 생성 File file1 = new File(uploadPath + savedFileName); // 6. 서버로 전송 file.transferTo(file1); } // model로 저장 model.addAttribute("originalFileNameList", originalFileNameList); return"upload/fileUploadMultipleResult"; }
Java
복사
<!-- fileUploadForm.jsp --><body> <h3>파일 업로드 (여러 개 파일 업로드)</h3> <form id="fileUploadFormMulti" method="post" action="/upload/fileUploadMultiple" enctype="multipart/form-data"> 파일 : <input type="file" id="uploadFileMulti" name="uploadFileMulti" multiple="multiple"><br><br> <input type="submit" value="업로드"> </form> </body>
XML
복사
<!-- fileUploadMultipleResult.jsp --><body> 다음의 파일을 전송하였습니다.<br> <c:forEach items="${originalFileNameList}" var="file"> ${file} <br> </c:forEach><br> (서버에만 출력) Users/gobyeongchae/Desktop/UploadServerFile 확인 </body>
XML
복사

파일 업로드 예제 3

원본 파일명 그대로 업로드
예 : 상품 사진 등록하는 경우
상품명과 동일한 이름으로 저장
// FileUploadController.java// 파일 업로드 처리 (원본 파일명 사용)@RequestMapping("/upload/fileOriginalNameUpload") public String fileUploadOriginal(@RequestParam("uploadFileOrigin") MultipartFile file, Model model) throws IOException { // 1. 파일 저장 경로 설정 : 실제 서비스되는 위치(프로젝트 외부에 저장) String uploadPath = "/Users/gobyeongchae/Desktop/UploadServerFile/"; // 2. 원본 파일 이름 알아오기 String originalFileName = file.getOriginalFilename(); // 3. 파일 생성 File file1 = new File(uploadPath + originalFileName); // 4. 서버로 전송 file.transferTo(file1); // model로 저장 model.addAttribute("originalFileName", originalFileName); return"upload/fileUploadResult"; }
Java
복사
<!-- fileUploadForm.jsp --><body> <h3>파일 업로드 (원본 파일명 그대로 업로드)</h3> <form id="fileOriginalNameUpload" method="post" action="/upload/fileOriginalNameUpload" enctype="multipart/form-data"> 파일 : <input type="file" id="uploadFileOrigin" name="uploadFileOrigin" ><br><br> <input type="submit" value="업로드"> </form> <br><h3>파일 업로드 (원본 파일명 그대로 업로드)</h3> <form id="fileOriginalNameUpload" method="post" action="/upload/fileOriginalNameUpload" enctype="multipart/form-data"> 파일 : <input type="file" id="uploadFileOrigin" name="uploadFileOrigin" ><br><br> <input type="submit" value="업로드"> </form> <br> </body>
XML
복사
<!-- fileUploadResult.jsp --><body> ${originalFileName} 파일을 업로드 하였습니다.<br> (서버에만 출력) Users/gobyeongchae/Desktop/UploadServerFile 확인 </body>
XML
복사

파일 다운로드 예제

폴더 내 파일 목록에서 선택해서 다운로드
다운로드 폴더로 파일 다운로드
@Controller public class FileDownloadController { // 파일 다운로드 폼으로 이동@RequestMapping("download/fileDownloadListView") public ModelAndView fileDownloadList() { ModelAndView mv = new ModelAndView(); // 폴더에 있는 전체 파일 목록 가져오기 File path = new File("/Users/gobyeongchae/Desktop/UploadServerFile/"); String[] fileList = path.list(); mv.addObject("fileList", fileList); mv.setViewName("download/fileDownloadListView"); return mv; } // 파일 다운로드 처리@RequestMapping("/fileDownload/{file}") public void fileDownload(@PathVariable String file, HttpServletResponse response) throws IOException { File f = new File("/Users/gobyeongchae/Desktop/UploadServerFile/", file); // file 다운로드 설정 response.setContentType("application/download"); response.setContentLength((int)f.length()); response.setHeader("Content-disposition", "attachment;filename=\"" + file + "\""); // response 객체를 통해서 서버로부터 파일 다운로드 OutputStream os = response.getOutputStream(); // 파일 입력 객체 생성 FileInputStream fis = new FileInputStream(f); FileCopyUtils.copy(fis, os); fis.close(); os.close(); } }
Java
복사
<body> <c:forEach items="${fileList}" var="file"> <a href="<c:url value='/fileDownload/${file}'/> ">${file} 파일 다운로드</a><br> </c:forEach> </body>
XML
복사