您的位置:首页 > 其它

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

2018-03-07 05:39 211 查看
问题描述:

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



报错信息:

访问图片报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实现)



索引库更新后,再上传就不会出现问题了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  solr image 商城 图片 搜索