쇼핑몰에 상품을 등록하기 위해서는 상품 이미지가 반드시 필요합니다.
쇼핑몰 프로젝트에 상품 이미지 업로드를 구현해보겠습니다.
상품 등록 html 파일에서 이미지 관련 설정을 합니다.
<form th:action="@{/item/new/pro}" method="post" enctype="multipart/form-data">
<div class="row g-3">
<hr/>
<div class="col-12">
<label for="name" class="form-label">상품 이름</label>
<input type="text" class="form-control" id="name" name="name" placeholder="상품 이름을 입력하세요.">
<div class="invalid-feedback">
Your name is required.
</div>
</div>
<div class="col-12">
<label for="text" class="form-label">상품 설명</label>
<input type="text" class="form-control" name="text" id="text" placeholder="상품 설명을 입력하세요.">
<div class="invalid-feedback">
Input is empty.
</div>
</div>
<div class="col-12">
<label for="price" class="form-label">상품 가격</label>
<input type="text" class="form-control" id="price" name="price" placeholder="상품 가격을 입력하세요.">
<div class="invalid-feedback">
Input is empty.
</div>
</div>
<div class="col-12">
<label for="stock" class="form-label">상품 재고</label>
<input type="text" class="form-control" id="stock" name="stock"
placeholder="상품 재고를 입력하세요.">
<div class="invalid-feedback">
Input is empty.
</div>
</div>
<div class="col-12">
<label for="text" class="form-label">상품 이미지 업로드</label>
<input type="file" class="form-control" id="imgFile" name="imgFile">
</div>
// 상품 등록 (POST) - 판매자만 가능
@PostMapping("/item/new/pro")
public String itemSave(Item item, @AuthenticationPrincipal PrincipalDetails principalDetails, MultipartFile imgFile) throws Exception {
if(principalDetails.getUser().getRole().equals("ROLE_ADMIN") || principalDetails.getUser().getRole().equals("ROLE_SELLER")) {
// 판매자
item.setSeller(principalDetails.getUser());
itemService.saveItem(item, imgFile);
return "redirect:/main";
} else {
return "redirect:/main";
}
}
// 상품 등록
public void saveItem(Item item, MultipartFile imgFile) throws Exception {
String oriImgName = imgFile.getOriginalFilename();
String imgName = "";
String projectPath = System.getProperty("user.dir") + "/src/main/resources/static/files/";
// UUID 를 이용하여 파일명 새로 생성
// UUID - 서로 다른 객체들을 구별하기 위한 클래스
UUID uuid = UUID.randomUUID();
String savedFileName = uuid + "_" + oriImgName; // 파일명 -> imgName
imgName = savedFileName;
File saveFile = new File(projectPath, imgName);
imgFile.transferTo(saveFile);
item.setImgName(imgName);
item.setImgPath("/files/" + imgName);
itemRepository.save(item);
}
th:src="@{${item.getImgPath()}}"
이제 메인화면에 가보면 이미지 파일이 잘 등록된 것을 확인할 수 있습니다.
성공입니닷!!
선생님 덕분에 이미지 구현 완성했습니다.. 근데 문제가
이미지가 바로 안나오고, 스프링툴에서 refresh 한번 하고 와야 이미지가 나오네요..