Spring mulitpartRequest를 이용한 파일 업로드 [펌]
로직이 완벽하지는 않다.
작성된 내용들을 검색하는 동안 확인해보았는데.
cos.jar 파일을 이용한 방법이 두루쓰이는거 같았다.
하지만 이 예제는 그냥 Spring에서 제공하는 걸로 파일 업로드 방법이다.
내일 잘 연구해서 써먹어보자.
출처 - http://jeonsh.tistory.com/10
pring2.5에서는 File Upload를 위해서 기본적으로 CommonsMultipartResolver라는 클래스를 제공한다.- MultipartResolver우선 dispatcher-servlet.xml파일에 File Upload를 위한 설정을 한다.
uploadDirResource는 File Upload시 다중접속으로 인해 용량이 한꺼번에 몰리는것을 방지하기 위한 임시저장소 설정이고, uploadRepository가 실제 File이 Upload되는 Directory이다.
fileUpload.jsp**
View파일에서 주의할 점은 File Upload시 Form형식이 “multipart/form-data”라는 점이다. 이 경우에는 반드시 넘겨주어야 하는 값을 으로 설정하더라도 Role과 Session을 체크할 경우 일반적인 HttpServletRequest로 받을 수 없다. 따라서, 이런 값들은 <form action="">에서 URL 뒤에 Parameter값으로 넘겨주어야 한다. 아니면, HttpServletRequest로 변환할 수 있는 Utility를 따로 구현해야 한다.FileUploadController.java**
private String uploadRepository;public void setUploadRepository(String uploadRepository) { this.uploadRepository = uploadRepository;}public void fileUpload(HttpServletRequest request, HttpServletResponse response) throws Exception{ MultipartRequest multipartReq = (MultipartRequest)request; MultipartFile multipartFile = multipartReq.getFile(“multipartFile”); MultipartFile multipartFile = submitReport.getMultipartFile(); if(multipartFile.isEmpty()){ System.out.println(“## 비어있는 파일입니다!!”); } String uploadDir = uploadRepository + File.separator; try{ new File(uploadDir).mkdir(); multipartFile.transferTo(new File(uploadDir + multipartFile.getOriginalFilename())); } catch(IOException e){** throw new RuntimeException(e.getMessage()); }}
보면 알겠지만, 실제로 구현해줘야 할 로직은 간단하다.
아래는 내가 응용한 것이다.
String savePath = ”D:\경로”; int sizeLimit = 3 1024 1024;
public String ImgUpLoader(HttpServletRequest request) throws Exception {
MultipartRequest multi = (MultipartRequest) request; MultipartFile file = multi.getFile(“bookImg”); String reNameFile = ””;
try { if (file.isEmpty()) { //파일 유무 검사 return reNameFile; } else if (file.getSize() > sizeLimit) { System.out.println(“## 용량이 너무 큽니다. \n 3메가 이하로 해주세요.”); return ”error”; }
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy_MM_dd_hhmmss”); Calendar c = Calendar.getInstance(TimeZone.getTimeZone(“Asia/Seoul”));
String uploadDir = savePath + File.separator; new File(uploadDir).mkdir(); // 해당 경로 폴더 없을 떄 폴더 생성. String getFileName[] = file.getOriginalFilename().split(“\.”);
// 파일 이름 및 확장자 분리
//reNameFile = getFileName[0] + ”_“ + request.getParameter(“loginId”)
+ ”_“ + sdf.format(c.getTime()) + ”.” + getFileName[1];
//파일 이름 설정 = 원본 파일 이름 사용자ID 년월일분초 .확장자.
reNameFile = getFileName[0] + ”_“ + sdf.format(c.getTime()) + ”.” + getFileName[1]; file.transferTo(new File(savePath + reNameFile));
Debug.logger.debug(“fileName —–> \n” + file.getOriginalFilename() + ” \n ” +
file.getSize() + ”\n reName : ” + reNameFile);
} catch (IOException e) { throw new RuntimeException(e.getMessage()); } return reNameFile; }