Scenario: 이미지 파일첨부를 하려는데 기존 소스는 다중 파일첨부 였다, (multipartHttpServletRequest 리스트를 받아서 리스트를 돌리는 구조의 코드였음.) 이것을 살짝 변형 시켜서 단일 파일첨부구조와 재활용성이 가능하게 바꾸려고 고쳐보았다.


Solutions: 다음



1. 가장먼저 Multipart 객체를 받아서 파일과, 함께보내진 폼 요소를 파싱해줄  자바의 파일유틸부터 만들어줌

  1.     //파일 하나만 업로드시킬려고만듬 FileUtil.java (클래스가 없을경우 만들어 줘야함)
  2.     public Map<String,Object> parseInsertFileInfoOne(Map<String,Object> map, HttpServletRequest request) throws Exception{
  3.        
  4.         MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)request;
  5.         Iterator<String> iterator = multipartHttpServletRequest.getFileNames();
  6.        
  7.         MultipartFile multipartFile = null;
  8.         String originalFileName = null;
  9.         String originalFileExtension = null;
  10.         String storedFileName = null;
  11.        
  12.         Map<String, Object> FileInfoMap = null;
  13.        
  14.        
  15.         //폴더가 없으면 해당 폴더 생성
  16.         File file = new File(CommonUtils.filePath);
  17.         if(file.exists() == false){
  18.             file.mkdirs();
  19.         }
  20.        
  21.         while(iterator.hasNext()){
  22.             multipartFile = multipartHttpServletRequest.getFile(iterator.next());
  23.             if(multipartFile.isEmpty() == false){
  24.                 originalFileName = multipartFile.getOriginalFilename();
  25.                 originalFileExtension = originalFileName.substring(originalFileName.lastIndexOf("."));
  26.                 storedFileName = CommonUtils.getRandomString() + originalFileExtension;
  27.                
  28.                 file = new File(CommonUtils.filePath + storedFileName);
  29.                 multipartFile.transferTo(file);
  30.                
  31.                 FileInfoMap = new HashMap<String,Object>();
  32.                 //인터셉트 맵 자체를 리턴해줄 파일맵에다 넣어줌. 그렇다면 구지 뉴 객체를 생성안해도 될듯
  33.                 FileInfoMap = map;
  34.                
  35.                 FileInfoMap.put("ORIGINAL_FILE_NAME", originalFileName);
  36.                 FileInfoMap.put("STORED_FILE_NAME", storedFileName);
  37.                 FileInfoMap.put("FILE_SIZE", multipartFile.getSize());
  38. //              FileInfoMap.put("REFER_IDX", (String)map.get("IDX"));
  39. //              FileInfoMap.put("NAME", (String)map.get("NAME"));
  40. //              FileInfoMap.put("PJT_SCH_TITLE", (String)map.get("PJT_SCH_TITLE"));
  41. //              FileInfoMap.put("PJT_SCH_CONTENT", (String)map.get("PJT_SCH_CONTENT"));
  42.             }
  43.         }
  44.         return FileInfoMap;
  45.     }


2.Service 객체에서 쓰는방법 예시 (컨트롤러에서 서비스로 보내준뒤 서비스에서 파일유틸 호출)

Java 0.27 KB
  1.     //serviceImpl.java
  2.     @Override
  3.     public void insertProjectSchedule(Map<String, Object> map, HttpServletRequest request) throws Exception {
  4.         Map<String, Object> resultMap = fileUtils.parseInsertFileInfoOne(map, request);
  5.         projectDAO.insertProjectSchedule(resultMap);
  6.     }


3.마이바티스 예시 (많은 파일 속성을 갖고있지만, 이 프로젝트에선 저장된 파일명만 쓴다고 가정

SQL 0.32 KB
  1.         <!-- 예시 sql -->
  2.         INSERT INTO PJT_SCHEDULE
  3.         (
  4.             PJT_SCH_IDX,
  5.             PJT_IDX,
  6.             SCH_TITLE,
  7.             SCH_CONTENT,
  8.             CREA_DATE,
  9.             DEL_FLAG,
  10.             IMG_NAME
  11.         )
  12.         VALUES
  13.         (
  14.             PJT_SCHEDULE_IDX_SEQ.NEXTVAL,
  15.             #{REFER_IDX},
  16.             #{PJT_SCH_TITLE},
  17.             #{PJT_SCH_CONTENT},
  18.             SYSDATE,
  19.             'N',
  20.             #{STORED_FILE_NAME}
  21.         )



4.로컬에 저장된 사진들을 띄울때. (파일패스 경로 전역변수는 적절한곳에 추가해줌)

Java 1.01 KB
  1.  
  2.     /* 이미지 파일불러올때 */
  3.     //Commoncontroller.java
  4.     //이미지 파일 띄울때 컨트롤러를 경유해서 로컬 저장소에 접근하는 것
  5.     @RequestMapping(value="common/getImage.do")
  6.     protected void getImageFile(CommandMap commandMap, HttpServletResponse response) throws Exception
  7.     {
  8.         String fileName = (String) commandMap.get("IMG_NAME");
  9.  
  10.         if(!fileName.isEmpty())
  11.         {
  12.             File file = new File(CommonUtils.filePath+fileName);
  13.             response.setHeader("Content-Type""image/*");
  14.             response.setHeader("Content-Length"String.valueOf(file.length()));
  15.             response.setHeader("Content-Disposition""inline; filename=\"" + file.getName() + "\"");
  16.             Files.copy(file.toPath(), response.getOutputStream());
  17.            
  18.             response.getOutputStream().flush();
  19.             response.getOutputStream().close();
  20.         }
  21.     }
  22.  
  23.  
  24.     //common utils.java에 변수추가(파일패스)
  25.     public static final String filePath = "C:\\dev\\upload\\";



+ Recent posts