Programing/Spring

Java Spring File Upload MultipartHttpServletRequest 멀티파일 업로드 방법

리커니 2018. 3. 13.
반응형


Java Spring File Upload MultipartHttpServletRequest 멀티파일 업로드 방법

 

이번 포스팅에서는 멀티로 선택된 파일을 업로드 하는 방법을 알아보도록 하겠습니다.

멀티로 선택된 파일을 서블릿으로 전달 하는 과정은 아래의 Link를 참고하세요.

 

MultipartHttpServletRequest

transferTo

 

Link : javascript spring 멀티파일선택 업로드 ajaxForm multipart/form-data MultipartHttpServletRequest

 

MultipartHttpServletRequest로 받은 파일을 원하는 경로에 저장하는 방법을 보겠습니다.

 

1
2
3
4
5
6
7
try{
    String path = "C:\\TAAT\\upload\\";
    List<MultipartFile> mf = req.getFiles("files[]");
    file = UploadController.fileUpload(path, mf);
}catch(IOException e){
    e.printStackTrace();
}
cs

 

저장할 파일의 경로를 저장한 스트링 객체와 멀티파트파일 리스트 객체를

UploadController.fileUpload 함수의 매개변수로 전달해 줍니다.

그럼 매개변수를 전달받은 fileUpload 소스를 보도록 하겠습니다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class UploadController {
     public static FileVO fileUpload(String path, List<MultipartFile> mf) throws Exception{
         File file = null;
         File dir = new File(path);
         int fileCnt = mf.size();
         
         String[] paramOfn = new String[fileCnt];
         String[] paramSfn = new String[fileCnt];
         double[] paramFsz = new double[fileCnt];
         String[] paramFet = new String[fileCnt];
         
         String originFileNm = null;
         String savedFileNm = null;
         double fileSize = 0;
         String fileExtension = null;
         FileVO fileParam = new FileVO();
         
         /* 폴더가 없을 경우 생성*/
         if(!dir.isDirectory()){
             dir.mkdir();
         }
         
         for(int i=0; i<mf.size(); i++){
             originFileNm = mf.get(i).getOriginalFilename();
             savedFileNm = UUID.randomUUID().toString().replaceAll(",""");
             fileSize = mf.get(i).getSize();
             fileExtension = FilenameUtils.getExtension(originFileNm).toLowerCase();
             /* 파라메터로 리턴할 객체를 만든다. */
             paramOfn[i] = originFileNm;
             paramSfn[i] = savedFileNm+"."+fileExtension;
             paramFsz[i] = fileSize;
             paramFet[i] = fileExtension;
             
             try {
                 /* 업로드 할 파일을 만들고 파일을 복사 */
                 file = new File(path+"\\"+savedFileNm+"."+fileExtension);
                 mf.get(i).transferTo(file);
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
         fileParam.setOriginFileNm(paramOfn);
         fileParam.setSavedFileNm(paramSfn);
         fileParam.setFileSize(paramFsz);
         fileParam.setFileExtension(paramFet);
         return fileParam;
     }
}
cs

 

저의 경우 파일 업로드 후 DB에 저장을 하기 때문에 리턴값을 설정하여서 소스가 길어졌지만

실제로 파일 업로드가 일어나는 코드는 2줄이 다 입니다. (36, 37 line)

 

line 36에서 업로드할 파일의 경로와 파일명을 설정하고,

line 37에서 멀티파트파일로 받은 파일을 위에서 설정한 파일로 복사 하는 것입니다.

transferTo 메소드는 1.4 버전 이상의 자바에서 지원합니다.

(UUID를 사용하는 이유는 같은 이름의 파일 업로드를 가능하게 하기 위해서 입니다. - 요청)

반응형

댓글

💲 추천 글