이미지는 수정할게 있으면 수정 전 상품을 삭제하고, 수정할 게 없으면 원래 이미지 그대로 수정가능하도록
//수정 전 상품 불러오기(id로 검색) -> 수정할게 있다면 삭제하도록
Product currentProduct = productRepo.getById(product.getId());
IF절에 else에서
최종적으로 슬러그, 이미지 저장할 때
슬러그는 저장하고 이미지만 수정할게 있을 경우의 if절 추가한다.
//수정 할 이미지 파일이 있다
if(!file.isEmpty()) {
//수정 전 이미지 주소 삭제
Path currentPath = Paths.get("src/main/resources/static/media/"+ currentProduct.getImage());
Files.delete(currentPath);
//다시 올라간 수정한 이미지로 저장
product.setImage(fileName);
Files.write(path, bytes);
}else { //수정할 이미지가 없다
product.setImage(currentProduct.getImage());
}
수정전 이미지를 삭제하고 수정 한 이미지를 저장하기 위한 코드
- 수정을 안했을때 이미지 파일 확장자 오류가 뜬다 (이미지를 jpg 또는 png를 사용하세요)
No property 'findbyName' found for type 'Product'!
findByName 으로 메서드 이름 고쳐보자!
- 위에 정해놓은 jpg,png 확장자 파일이 아닐때 false
if(!fileOk) {
attr.addFlashAttribute("message", "이미지를 jpg 또는 png를 사용하세요");
attr.addFlashAttribute("alertClass", "alert-success");
}else if (productExists != null) {//이미 등록한 상품이름 있다
attr.addFlashAttribute("message", "등록한 상품이 있습니다. 다른 상품을 적으세요");
attr.addFlashAttribute("alertClass", "alert-success");
}else { //슬러그, 이미지 저장
product.setSlug(slug);
product.setImage(fileName);
productRepo.save(product);
Files.write(path, bytes);
}
상품,이미지 저장할때 Files.write(path, bytes);
BindingResult.hasErrors() 관련 오류
이미지 파일 올릴때 input태그에서 문제발견
th:field="*{image}"를
th:id="file" th:name="file"로 바꿔주니 해결됨
왜왜왜왜왜왜
th:field 는 id, name, value 속성을 자동으로 생성해주지 th:id, th:name 를 생성하는게 아니기 때문!!
이번엔 이미지 부분에 사진이 보이도록 해보자!!
- WebConfig 에 media(이미지 저장폴더)를 설정해줌
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 저장된 파일(이미지)의 경로를 지정한다. (이미지를 사용하기 위함)
registry
.addResourceHandler(".media/**")
.addResourceLocations("C:\\SPRINGBOOT\\Spring-workspace\\uglyMarket\\src\\main\\resources\\static\\media");
}