'첨부파일 처리'에 해당되는 글 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 |
'프로그래밍' 카테고리의 다른 글
스프링 프로젝트 - 공지사항 등록 테스트 (0) | 2017.03.17 |
---|---|
스프링 프로젝트 - 공지사항 기능 구현 (0) | 2017.03.16 |
스프링 프로젝트 - 공지사항 Request 처리를 위한 환경설정 (0) | 2017.02.21 |
스프링 프로젝트-공지사항 등록 화면 구현 (0) | 2017.02.17 |
스프링 프로젝트-스프링 환경설정 (0) | 2017.02.15 |