photoBoardInsert 이미지 업로드 해결

 

다중이미지 업로드가 되야 했고, 파일선택을 눌러서 이미지를 업로드 하고 나서 바로 저장되는것이 아니라

등록 버튼 눌러야 해당 경로로 잡히도록 하고싶었음.

 

다중 선택과 preview, 이미지 저장까지는 해놨던게 있으니까 금방 구현했는데

문제는 이걸 하나하나 받아서 VO에 set해주질 못했음...

 

private String insertPhotoProc(PhotoBoardVO photoBoardVO, 
                               MultipartHttpServletRequest mtf, HttpServletRequest request) throws Exception{
  
  //다중 업로드이기때문에 List로 받기 위함.
  List<String> photoImgArray = new ArrayList<String>();
  //MultipartFile을 List로 다중파일을 가져온다.
  List<MultipartFile> fileList = mtf.getFiles("files");
  
  //파일 경로
  String filePath = request.getSession().getServletContext().getRealPath("image/board/photoboard/");
  
  for(MultipartFile mf : fileList){
  
      StringBuffer sb = new StringBuffer();
      //파일 원본명
      String originFileName = mf.getOriginalFilename();
      //파일 저장명
      String saveName = sb.append(new SimpleDateFormat("yyyyMMddHHmmss").format(System.currentTimeMillis()))
                          .append(UUID.randomUUID().toString())
                          .append(originFileName.substring(originFileName.lastIndexOf("."))).toString();
      //저장파일
      String saveFile = filePath + saveName;
      
      //List에 담기
      photoImgArray.add(saveName);
      
      //저장
      mf.transferTo(new File(saveFile));
}

//List에서 꺼내와서 VO에 set
int filesSize = photoImgArray.size();

if(filesSize != 0){
    int i = 1;
    switch(filesSize){
        case 5 :
            photoBoardVO.setPhotoImg5(photoImgArray.get(filesSize -i));
            i++;
        case 4 :
            photoBoardVO.setPhotoImg4(photoImgArray.get(filesSize -i));
            i++;
        case 3 :
            photoBoardVO.setPhotoImg3(photoImgArray.get(filesSize -i));
            i++;
        case 2 :
            photoBoardVO.setPhotoImg2(photoImgArray.get(filesSize -i));
            i++;
        case 1 :
            photoBoardVO.setPhotoImg1(photoImgArray.get(filesSize -i));
            i++;
    }
}

 

이렇게 작성해서 해결.

 

작성하고 하나 문제점 있었던것이 saveName이 만약 a, b, c, d, e 이렇게 다섯개가 나왔어야 하는것이라고 하면

 

a, ab, abc, abcd, abcde 이렇게 나오는게 제일 문제.

 

그래서 filePath와 saveName을 찍어보니 saveName이 문제였다.

 

stringBuffer는 계속 쌓이기때문에 기존에 잡아줬던 a가 살아남아있는상태에서 b가 씌워져서 ab가 된것.

 

그래서 for문 안으로 StringBuffer sb = new StringBuffer();

를 넣어주어서 for문이 한번 돌때마다 StringBuffer를 초기화 시키니 문제 해결.

 

switchcase같은 경우는 최대 이미지 개수가 5장이고 1장만 들어올 수도 있기 때문에 

5장일때 photoImg5부터 set을 해주었다.

 

만약 장수제한 없으면 뭐 상관없겠지

 

이번에는 db테이블이 

photoTitle, memberId, photoContent, photoImg1, photoImg2.......

이런식으로 되어있어서 이렇게 작성했는데

 

만약 이미지 업로드에 장수제한이 없었다면 이미지 컬럼을 다 지우고 다른 테이블에 photoBoardNo, photoImg

이렇게 만들어줘서 입력하는게 더 낫다고 함.

 

단, 이번처럼 장수 제한이 있다면 join을 하는것보다 이게 더 속도가 빠르기 때문에 이게 맞는것이라고 하셨음!!

'Project&문제해결' 카테고리의 다른 글

BoardProject 11/4 JSON해결.  (0) 2020.11.04
BoardProject 10/22  (0) 2020.10.23
6월 24일 에러 (thehouseProject)  (0) 2020.06.24
6월 23일 에러 (thehouseProject)  (0) 2020.06.23
6월 17일 에러 (thehouseProject)  (0) 2020.06.18

+ Recent posts