'첨부파일 처리'에 해당되는 글 1건

  1. 2017.03.10 :: 스프링 프로젝트 - 첨부파일 처리
프로그래밍 2017. 3. 10. 11:30

공지사항 첨부파일 처리



1. 첨부파일 처리


1.1 File을 다루기위한 FileUtil 클래스 구현

 - 아래의 소스처럼 파일을 다루기위한 메소드를 util로 미리 만들어 놓으세요!


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
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.devdic.util.file;
 
import java.io.File;
import java.net.URLEncoder;
 
import com.devdic.util.date.DateUtil;
 
public class FileUtil {
    
    // 디렉토리 확인, 존재하지 않을 경우 생성
    public static void exsitDir(File file) throws Exception{
        if(file.exists() == false){
            file.mkdirs();
        }
    }
    
    // DB에 저장할 유일한 파일명으로 변경
    public static String getSaveFileNm(String orgFileName, String orgFileExtension) throws Exception{
        StringBuffer sb = new StringBuffer();
        sb.append(DateUtil.getDate());
        sb.append("_");
        sb.append(orgFileName);
        sb.append(orgFileExtension);
        return sb.toString();
    }
    
    // 파일 다운로드 시 Cilent의 브라우저에 따라 파일명의 인코딩 설정
    public static String getEncodedFileNameByBrowser(String filename, String browser) throws Exception {
        
           String encodedFilename = null;
           if (browser.equals("MSIE")) {
                encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+""%20");
           } else if (browser.equals("Firefox")) {
                encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1"+ "\"";
           } else if (browser.equals("Opera")) {
                encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1"+ "\"";
           } else if (browser.equals("Chrome")) {
              StringBuffer sb = new StringBuffer();
              for (int i = 0; i < filename.length(); i++) {
                          char c = filename.charAt(i);
                          if (c > '~') {
                                     sb.append(URLEncoder.encode("" + c, "UTF-8"));
                          } else {
                                     sb.append(c);
                          }
              }
              encodedFilename = sb.toString();
           } else {
              throw new RuntimeException("Not supported browser");
           }
           return encodedFilename;
        }
    
    // 파일을 해당 디렉토리에서 삭제
    public static void deleteFile(String filePath) throws Exception{
        File file = new File(filePath);
        file.delete();
    }
 
}
 
cs


1.2 DB에 유일한 파일명으로 저장하기 위해 시간값을 사용

 - DataUtil 구현


1
2
3
4
5
6
7
8
9
10
11
12
package com.devdic.util.date;
 
import java.util.Calendar;
 
public class DateUtil {
    
    public static long getDate() throws Exception{
        Calendar  today = Calendar.getInstance();
        long date = today.getTimeInMillis();
        return date;
    }
}
cs


1.3 HttpServletRequest 객체에서 사용자가 업로드한 파일을 서버에 저장 및 DB에 저장하기 위한 정보처리

 - FileUpload.java 구현


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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.devdic.util.file;
 
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
 
import com.devdic.board.vo.NoticeVO;
 
public class FileUpload {
    
    // 나중에 properties파일로 변경하여 관리
    private static final String filePath = "C:\\devdic\\file\\upload\\";
         
    public List<NoticeVO> parseInsertFileInfo(HttpServletRequest request) throws Exception{
        
        // Client의 request를 MultipartHttpServletRequest 객체로 캐스팅(변환)
        MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)request;
        
        // MultipartHttpServletRequest 객체에서 파일정보를 Iterator타입으로 저장
        Iterator<String> iterator = multipartHttpServletRequest.getFileNames();
         
        MultipartFile multipartFile = null;
        String orgFullFileNm = null// 사용자가 업로드한 파일명(확장자 포함) 
        String orgFileNm = null// 사용자가 업로드한 파일명(확장자 제외) 
        String orgFileExtension = null// 파일 확장자명
        String saveFileNm = null// DB에 저장할 파일명
        
        // 사용자가 업로드한 여러개의 파일을 처리하기 위해 List 객체 생성
        List<NoticeVO> list = new ArrayList<NoticeVO>();
        
        // 각각의 파일정보를 저장할 VO 객체 초기화
        NoticeVO listMap = null
        
        // 파일을 저장할 디렉토리 확인, 디렉토리 없을 시 생성하는 로직 포함
        File file = new File(filePath);
        FileUtil.exsitDir(file);
        
        // MultipartHttpServletRequest 객체에서 파일의 개수 만큼 아래의 로직을 반복 수행
        while(iterator.hasNext()){
            multipartFile = multipartHttpServletRequest.getFile(iterator.next());
            if(multipartFile.isEmpty() == false){
                orgFullFileNm = multipartFile.getOriginalFilename();
                orgFileNm = orgFullFileNm.substring(0,orgFullFileNm.lastIndexOf("."));
                System.out.println("orgFileNm : " + orgFileNm);
                orgFileExtension = orgFullFileNm.substring(orgFullFileNm.lastIndexOf("."));
                saveFileNm = FileUtil.getSaveFileNm(orgFileNm, orgFileExtension);
                 
                file = new File(filePath + "/" +saveFileNm);
                multipartFile.transferTo(file);
                 
                listMap = new NoticeVO();
                
                listMap.setAttFileNm(orgFullFileNm);
                listMap.setAttFileSaveNm(saveFileNm);
                listMap.setAttFileSize(multipartFile.getSize());
                
                list.add(listMap);
            }
        }
        return list;
    }
 
}
 
cs



posted by 생각퍼즐
: