게시글을 임시저장 한 뒤, 썸네일 수정하면, db에 뜨지 않던 에러

Yunny.Log ·2022년 8월 20일
0

Debugging

목록 보기
38/69
post-thumbnail
  • 나는 이미지를 업로드한다면 , 이미지를 db 및 경로에 올리는데 이때 unique name을 생성해서 이미지만의 고유(다른 것들과 겹치지 않는) 이름을 가지게 해서 업로드한다.

문제가 되었던 코드

NewItem.java


        if (req.getThumbnail()!=null && req.getThumbnail().getSize() > 0) {
            System.out.println("업데이트된 썸네일이 있네," +
                    "기존걸 삭제하고ㅡ 이걸 넣자! ");

			//기존 이미지 삭제
            if (this.thumbnail!=null) {
                
                
                System.out.println("기존 이미지 삭제할게잉 ");

                deleteImages(this.thumbnail);
            }

			// 새로 들어온 이미지 resultImage라는 이름으로 생성 
            NewItemImageUpdatedResult resultImage =
                    findImageUpdatedResult(
                            req.getThumbnail()
                    );
		// 아이템에 이 새로 들어온 이미지가 이제 니꺼야~ 라고 지정
            addImages(new NewItemImage(req.getThumbnail().getOriginalFilename())); // 문제 부분 
       // result Image 전달 
       // fileUpdatedResult에 저장된 고유명 기반으로 서비스에서 진짜 멀티파일들을 
       // 경로에 저장해줄 예정
            fileUpdatedResult =
                    new NewItemFileUpdatedResult(resultAttachment, resultImage);


        }

1) addImages

  • addImages 는 아이템의 이미지 등록메소드
  • 여기에 들어간 고유명으로 아이템 이미지 (NewItemImage) 를 생성해줌

2) fileUpdatedResult

  • fileUpdatedResult는 newitem 엔티티에서 update 메소드를 마치면 service에게 돌려줄 반환값,
  • 서비스에서는 이 반환값에 든 아이의 고유명으로 경로에 이미지를 등록해줌
  • 근데 보면 문제 부분에서 new 로 새 인스턴스로 생성해주고 있네?? 이미 resultImage 안에서 존재하게 해주었는데??

  • new로 새 인스턴스 생성하면 결국 고유명도 새로 생성됨

  • 따라서 addImages 를 통해 아이템 이미지가 저장돼있다고 뜨는 고유명과, fileUpdatedResult 를 통해 실제 파일 경로에 저장된 고유명이 다르게 됨

  • addImage에서 저장한 고유명으로 나는 프론트에 전달해주는데, 사실상 fileUpdatedResult 에 저장된 고유명으로 경로에 저장되어있으니 찾을 수가 없지~~ 참나 ~~

수정 후 코드


            if (this.thumbnail!=null)

            ) {
                //기존 이미지 삭제
                deleteImages(this.thumbnail);
            }

            NewItemImageUpdatedResult resultImage =
                    findImageUpdatedResult(
                            req.getThumbnail()
                    );
            this.thumbnail = resultImage.getAddedImages();
            // 새로 인스턴스 생성하는게 아니라, resultImage 에서 사용하는 것으로 통일해줘야지.

           addImages(resultImage.getAddedImages());

            fileUpdatedResult =
                    new NewItemFileUpdatedResult(resultAttachment, resultImage);
  • 새로 인스턴스 생성하는게 아니라, resultImage 에서 사용하는 것으로 통일해주기!

반성

  • 참으로 황당한 실수고, 가장 먼저 살펴봤어야 하는 부분인데 (이미지가 안뜨는 것은 99.0909090900 퍼센트 경로문제이므로) 방심했던 점이 많이 아쉽다.


왜 안되는지 거의 30번 정도 이미지 테스트를 하면서 도움을 많이 줬던 강아지 사진을 첨부하며 기분 좋게 마무리

0개의 댓글