shop--10.商品--商品编辑(后端)--Service层

主要步骤如下:

1. 如用户上传了缩略图,则将原有的缩略图删除(磁盘上删除),并更新tb_product表的img_addr字段,否则不做任何处理。

2. 如果用户上传了新的商品详情图片,则将原有的属于该productId下的全部的商品详情图删除(磁盘上删除),同时删除productId对应的tb_product_img中的全部数据。

3. 更新tb_product的信息

Service层新增两个接口

 1     /**
 2      * 通过商品Id查询唯一的商品信息
 3      * @param productId
 4      * @return
 5      */
 6     Product getProductById(long productId);
 7     
 8     /**
 9      * 修改商品信息以及图片处理
10      * @param product
11      * @param thumbnail
12      * @param productImgHolderList
13      * @return
14      * @throws ProductOperationException
15      */
16     ProductExecution modifyProduct(Product product,ImageHolder thumbnail,List<ImageHolder> productImgHolderList)
17     throws ProductOperationException;

实现类

 1     @Override
 2     public Product getProductById(long productId) {
 3         return productDao.queryProductById(productId);
 4     }
 5 
 6 
 7     /**
 8      * 注意事务控制@Transactional
 9      */
10     @Override
11     @Transactional
12     //1.若缩略图参数有值,则处理缩略图,
13     //若原先存在缩略图则先删除在添加新图,之后获取缩略图相对路径并赋值给product
14     //2.若商品详情图列表参数有值,对商品详情图片列表进行同样的操作
15     //3.将tb_product_img下面的该商品原来的商品详情图记录全部删除
16     //4.更新tb_product_img以及tb_product的信息
17     public ProductExecution modifyProduct(Product product, ImageHolder thumbnail, List<ImageHolder> productImgHolderList) throws ProductOperationException {
18         //空值判断
19         if (product != null && product.getShop() != null && product.getShop().getShopId() != null && product.getProductCategory().getProductCategoryId() != null) {
20             // 设置默认的属性
21             product.setLastEditTime(new Date());
22 
23             // Step1. 处理缩略图
24             if (thumbnail != null) {
25                 //先获取一遍原有信息,因为原来的信息里有原图片地址
26                 Product tempProduct = productDao.queryProductById(product.getProductId());
27                 // 1.1 删除旧的缩略图
28                 if (tempProduct.getImgAddr() != null) {
29                     ImageUtil.deleteFileOrPath(tempProduct.getImgAddr());
30                 }
31                 // 1.2 添加新的缩略图
32                 addThumbnail(product, thumbnail);
33             }
34 
35             // Step2. 处理商品详情
36 
37             // 如果添加商品成功,继续处理商品详情图片,并写入tb_product_img
38             if (productImgHolderList != null && productImgHolderList.size() > 0) {
39                 // 2.1 删除库表中productId对应的tb_product_img的信息
40                 deleteProductImgList(product.getProductId());
41                 // 2.2 处理商品详情图片,并写入tb_product_img
42                 addProductImgList(product, productImgHolderList);
43             }
44             try {
45                 // Step3.更新tb_product
46                 int effectNum = productDao.updateProduct(product);
47                 if (effectNum <= 0) {
48                     throw new ProductOperationException("商品更新失败");
49                 }
50                 return new ProductExecution(ProductStateEnum.SUCCESS, product);
51             } catch (Exception e) {
52                 throw new ProductOperationException("商品更新失败:" + e.getMessage());
53             }
54 
55         } else {
56             return new ProductExecution(ProductStateEnum.NULL_PRODUCT);
57         }
58     }
59 
60     private void deleteProductImgList(long productId) {
61         // 获取该商铺下对应的productImg信息
62         List<ProductImg> productImgList = productImgDao.queryProductImgList(productId);
63         // 遍历删除该目录下的全部文件
64         for (ProductImg productImg : productImgList) {
65             ImageUtil.deleteFileOrPath(productImg.getImgAddr());
66         }
67         // 删除tb_product_img中该productId对应的记录
68         productImgDao.deleteProductImgByProductId(productId);
69 
70     }

问题: 发现不能删除磁盘上的文件

一看文件名都是有.JEPG 不对啊,传入的后缀名都是.jpg的

后来一看是ImageUtil里的getExtension在之前的字符串越界问题上在后面+1了改回来就可以了

原文地址:https://www.cnblogs.com/windbag7/p/9414017.html