해당 포스팅에서는 상품 등록 기능의 흐름에 대해서 정리해 보고자 한다.
상품 등록 기능의 흐름은 다음과 같다.
- Controller
- ItemService - 아이템 저장
- ItemImgService - 아이템 이미지 저장
- FileService - 파일 업로드
@PostMapping("/item")
public String itemNew(@Valid ItemFormDto itemFormDto, BindingResult bindingResult, Model model,
@RequestParam("itemImgFile") List<MultipartFile> itemImgFileList,
@RequestParam(value = "parent_cate_id", required = true) Long parentCateId,
@RequestParam(value = "child_cate_id", required = false) Long childCateId) throws Exception {
...
try {
Category category = categoryService.getCategory(parentCateId, childCateId);
itemFormDto.setCategory(category);
itemService.saveItem(itemFormDto, itemImgFileList);
} catch (Exception e) {
...
}
return "redirect:/admin/items";
}
public Long saveItem(ItemFormDto itemFormDto, List<MultipartFile> itemImgFileList) throws Exception {
Item item = itemFormDto.toEntity();
itemRepository.save(item);
for (int i = 0; i < itemImgFileList.size(); i++) {
ItemImg itemImg = new ItemImg();
itemImg.setItem(item);
if (i == 0)
itemImg.setRepImgYn("Y");
else
itemImg.setRepImgYn("N");
itemImgService.saveItemImg(itemImg, itemImgFileList.get(i));
}
return item.getId();
}
public void saveItemImg(ItemImg itemImg, MultipartFile itemImgFile) throws Exception {
String oriImgName = itemImgFile.getOriginalFilename();
String imgName = "";
String imgUrl = "";
// 파일 업로드
if (!StringUtils.isEmpty(oriImgName)) {
imgName = fileService.uploadFile(itemImgLocation, oriImgName, itemImgFile.getBytes());
imgUrl = "/images/item/" + imgName;
}
// 이미지 정보 update -> DB 저장
itemImg.updateItemImg(oriImgName, imgName, imgUrl);
itemImgRepository.save(itemImg);
}
public String uploadFile(String uploadPath, String originalFileName, byte[] fileData) throws Exception {
UUID uuid = UUID.randomUUID();
String extension = originalFileName.substring(originalFileName.lastIndexOf("."));
String savedFileName = uuid.toString() + extension;
String fileUploadFullUrl = uploadPath + "/" + savedFileName;
FileOutputStream fos = new FileOutputStream(fileUploadFullUrl);
fos.write(fileData);
fos.close();
return savedFileName;
}