常见问题 —— 商场多图片显示头图问题

探讨了在商城项目中,使用Solr处理多张图片上传时遇到的问题及解决方案,包括如何正确设置头图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:
在做商城项目时,上传图片用于搜索时显示头图,当上传单张图片时可以正常显示,上传多张图片时不现实头图

这里写图片描述

报错信息:
访问图片报400错误

原因分析:
当有多张图片上传时,因为使用了solr的原因,多图片地址使用json格式写在一起。当取出图片时,取出的地址为String,String中可能存在多个使用逗号隔开的图片地址,这时直接使用此String作为图片地址会产生错误,从而得不到正确的头图

"images":["http://192.168.25.131/group1/M00/00/00/wKgZg1qdGIGAImsLAAK1asSSzZc991.jpg","http://192.168.25.131/group1/M00/00/00/wKgZg1qdGIGALTovAAT9Jeh1RYQ412.jpg"]

解决方法:

  • 方法一:将头图和详情显示的多图分开存入数据库
  • 方法二:商品上传到solr索引库时,只上传头图
  • 方法三:取到solr索引库中的图片地址后,再取其中的一张作为头图

方法一的缺点时增加了数据库的负担和操作的复杂性
方法二和方法三上传的地址都是字符串,对数据库的操作没有改变,因为考虑到热点商品高并发访问的问题,需要用到redis缓存数据,缓存的商品数据越少越好,减轻服务器的压力。综合考虑可以选择方法二进行头图显示。

修改上传solr索引库的商品图片为n个图片的第一个

public String getImage() {
      String img = image;
      try {
          String[] images = img.split(",");
          String image = images[0];
          return image;
      } catch (Exception e) {
          e.printStackTrace();
      }
      return image;
}

上传商品信息到索引库

public Result ImportItemsToIndex() {
       try {
           //1、查询商品列表
           List<SearchItem> itemList = itemMapper.getItemList();
           //2、遍历添加
           for (SearchItem searchItem : itemList) {

               //2.1、新建文档对象
               SolrInputDocument document = new SolrInputDocument();
               //2.2、向文档中添加域
               document.addField("id", searchItem.getId());
               document.addField("item_title", searchItem.getTitle());
               document.addField("item_sell_point", searchItem.getSell_point());
               document.addField("item_price", (long)searchItem.getPrice());
               document.addField("item_image", searchItem.getImage());
               document.addField("item_category_name", searchItem.getCategory_name());
               document.addField("item_desc", searchItem.getItem_desc());
               //2.3、把文档写入索引库
               solrServer.add(document);
           }
           //3、提交
           solrServer.commit();
       } catch (Exception e) {
           e.printStackTrace();
           Result.build(500, "数据导入失败!");
       }

更新索引库(删除之后再上传,或者使用ActiveMq实现)

这里写图片描述

索引库更新后,再上传就不会出现问题了
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值