웹 개발/웹 개발

commons-fileupload 라이브러리 ServletFileUplolad 클래스를 사용한 파일 업로드

크리스피코드 2023. 1. 10. 16:59
DiskFileItemFactory factory = new DiskFileItemFactory();

File uppath = new File("D:\\upload");

factory.setRepository(uppath);
factory.setSizeThreshold(1024 * 1024);

ServletFileUpload fileUpload = new ServletFileUpload(factory);

try{
    List<FileItem> items = upload.parseRequest(request);
    
    for(FileItem item : items){
    
        if(!item.isFormField){
            // 파일일 경우
            String fileName = item.getName();
            String separater = File.separater;
            fileName = fileName.substring(fileName.lastIndexOf(separater) + 1);
            
            File uploadFile = new File(uppath + separater + fileName);
            item.write(uploadFile);
        }
        
    }
} catch (Exception e) {
    e.printStackTrace();
}

 

1. DiskFileItemFactory 인스턴스 생성

 

2. 업로드 경로가 설정된 File 인스턴스 생성

 

3. DiskFileItemFactorysetRepository()저장 위치 설정

 

4. DiskFileItemFactorysetSizeThreshold()임시파일 크기 한계 설정

 

5. 설정이 끝난 DiskFileItemFactory를 사용해 ServletFileUpload 인스턴스 생성

 

6. parseRequest() 메서드를 통해 request에서 요청 데이터를 꺼내어 List 객체에 넣는다.

 

7. List에서 FileItem을 하나씩 꺼내온다.

 

8. 해당 FileItem이 일반 폼인지 파일인지 isFormField() 메서드로 구분한다.

일반 폼일 경우 true, 파일일 경우 false를 반환한다.

 

9. FileItemgetName() 메서드로 파일명을 가져온다.

 

10. 파일명에 경로까지 포함되는 경우가 있는데 그중 파일명만 가져오기 위해

경로명의 맨 마지막 경로 구분자(/ 또는 \\)의 위치를 구하여 substring()으로 파일명만 잘라낸다.

 

C:/Users/MyPC/Desktop/upload.txt

에서 Desktopupload.txt 사이의 슬래시의 위치를 구해 upload.txt만 잘라낸다.

 

11. FileItemwrite() 메서드로 파일을 해당 경로로 출력한다.