场景:需要导入一个excel中的图片,图片和编码,每行都有
当时实在没办法,斟酌良久获得以下解决方案,虽然此方案比较烂,但是好待功能实现了,在此记录以下,

只能先把excel上传至服务器,

导入接口的样子(参考以下)

 /*** 导入商品数据** @param file* @param redirectAttributes* @return*/@ResponseBody@RequestMapping(value = "crmGoods/import", method = RequestMethod.POST)public ResponseMessage importFile(MultipartHttpServletRequest request, RedirectAttributes redirectAttributes) throws NumberFormatException {try {List<MultipartFile> files = request.getFiles("file");SysUser user = UserUtils.getSysUser();if (files.size() > 0) {
//附件配置MultipartFile file=   files.get(0);SysAttachmentSettingExample exm = new SysAttachmentSettingExample();SysAttachmentSettingExample.Criteria cri = exm.createCriteria();cri.andCompanyIdEqualTo(user.getCompanyId());List<SysAttachmentSetting> attachmentSettingList = sysAttachmentSettingService.selectByExample(exm);if (attachmentSettingList.isEmpty()) {return new ResponseMessage("0", "请设置附件配置信息");}// 获得输入流://byte[] file = files.get(0).getBytes();//请设置附件配置信息SysAttachmentSetting attachmentSetting = attachmentSettingList.get(0);// new File(String.valueOf(files.get(0)));// file.getInputStream();System.out.println(file.getInputStream());JSONObject jsonObject= FileUploadUtils.uploadFile(files.get(0),user.getId());new importExcelByImg().getAllDate(jsonObject.get("copyFile").toString(),user.getId(),attachmentSetting);//FileUploadUtils.uploadImage();//ImportExcel ei = new ImportExcel(files.get(0), 2, 0);// importExcelByImg.getAllDate((File) files.get(0),attachmentSetting);
//               /* ImportExcel ei = new ImportExcel(files.get(0), 2, 0);
//
//                List<CrmGoods> list = ei.getDataList(CrmGoods.class);
//                if (list.isEmpty()) {
//                    return new ResponseMessage("0", "请填写数据");
//                }
//                List<String> error = validatorImport(list);
//                if (error.size() > 0) {
//                    return new ResponseMessage("0", error.toString());
//                }
//                SysUser user = UserUtils.getSysUser();
//                for (CrmGoods goods : list) {
//                    try {
//                        //中文单位
//                        if (StringUtils.isNotEmpty(goods.getBaseunitName())) {
//                            BdUnitExample unitExam = new BdUnitExample();
//                            com.waimaoyun.bd.model.BdUnitExample.Criteria unitCri = unitExam.createCriteria();
//                            unitCri.andNameEqualTo(goods.getBaseunitName());
//                            BdUnit unit = bdUnitService.selectByExample(unitExam).get(0);
//                            goods.setBaseunitId(unit.getId());
//                        }
//                        //商品分类
//                        if (StringUtils.isNotEmpty(goods.getGroupName())) {
//                            CrmGoodsGroupExample groupExample = new CrmGoodsGroupExample();
//                            CrmGoodsGroupExample.Criteria groupCr = groupExample.createCriteria();
//                            groupCr.andNameEqualTo(goods.getGroupName());
//                            groupCr.andDelFlagEqualTo("0");
//                            groupCr.andCompanyIdEqualTo(user.getCompanyId());
//                            CrmGoodsGroup group = crmGoodsGroupService.selectByExample(groupExample).get(0);
//                            goods.setGroupId(group.getId());
//                        }
//                        //原产地国
//                        if (StringUtils.isNotEmpty(goods.getTradeCountryName())) {
//                            BdTradeCountryExample trade_country_example = new BdTradeCountryExample();
//                            com.waimaoyun.bd.model.BdTradeCountryExample.Criteria trade_country_criteria = trade_country_example.createCriteria();
//                            trade_country_criteria.andNameEqualTo(goods.getTradeCountryName());
//                            BdTradeCountry bdTradeCountry = bdTradeCountryService.selectByExample(trade_country_example).get(0);
//                            goods.setTradeCountryId(bdTradeCountry.getId());
//                        }
//                        //海关编码
//                        if (StringUtils.isNotEmpty(goods.getBdhscodeName())) {
//                            BdHsCodeExample codeExam = new BdHsCodeExample();
//                            com.waimaoyun.bd.model.BdHsCodeExample.Criteria coodCri = codeExam.createCriteria();
//                            coodCri.andNumberEqualTo(goods.getBdhscodeName());
//                            BdHsCode code = bdHsCodeService.selectByExample(codeExam).get(0);
//                            goods.setBdhscodeId(code.getId());
//                            goods.setRefundrates(code.getExpRebates());
//                            goods.setExptaxrate(code.getExpTaxRate());
//                        }
//                        //报关中文
//                        if (StringUtils.isEmpty(goods.getHscodeName())) {
//                            goods.setHscodeName(goods.getName());
//                        }
//                        //报关英文
//                        if (StringUtils.isEmpty(goods.getHscodeEnname()) && StringUtils.isNotEmpty(goods.getEnname())) {
//                            goods.setHscodeEnname(goods.getEnname());
//                        }
//                        goods.setDelFlag("0");
//                        goods.setNumber(BusinessUtils.createBusinessOrderCode(goodsNumber));
//                        goods.setCompanyId(user.getCompanyId());
//                        goods.setCompanyName(user.getCompanyName());
//                        goods.setStatus(1);//1:启用
//                        //商品类型(0:CRM商品 1:正式商品)
//                        goods.setType("0");
//                        //初始化新增的实体的基础字段
//                        ServletsUtils.initAddModelBaseData(CrmGoods.class, goods, user);
//                        crmGoodsService.insert(goods);
//                    } catch (ConstraintViolationException ex) {
//                        logger.error("导入出错!", ex);
//                    }*/// }// addTipMessage(redirectAttributes, new TipMessage(error.toString(), "success"));} else {return new ResponseMessage("0", "请添加导入文件");}} catch (Exception e) {if (e instanceof IllegalArgumentException) {//判断是不是数据转换异常return new ResponseMessage("0", "请正确填写字段类型");}logger.error("excel导入出错", e);return new ResponseMessage("0", "商品导入数据异常");}return new ResponseMessage("1", "导入成功!");}

excel上传服务器之后,在使用以下方法读取,因为下面这个需要一个具体的文件地址,能力悠闲,谁有好的方法也可讨论

package com.waimaoyun.crm.controller;import com.fasterxml.jackson.databind.exc.InvalidFormatException;
import com.kingdee.bos.webapi.sdk.K3CloudApi;
import com.waimaoyun.admin.k3.controller.KdWebApiController;
import com.waimaoyun.common.config.MainConfig;
import com.waimaoyun.common.util.BaseGoodsImg;
import com.waimaoyun.common.util.FileUploadUtils;
import com.waimaoyun.common.util.StringUtils;
import com.waimaoyun.core.web.controller.WebBaseController;
import com.waimaoyun.core.web.sys.UserUtils;
import com.waimaoyun.core.web.util.ServletsUtils;
import com.waimaoyun.crm.model.CrmGoods;
import com.waimaoyun.crm.model.CrmGoodsExample;
import com.waimaoyun.crm.model.CrmGoodsImg;
import com.waimaoyun.crm.service.ICrmGoodsImgService;
import com.waimaoyun.crm.service.ICrmGoodsService;
import com.waimaoyun.sys.model.SysAttachmentSetting;
import com.waimaoyun.sys.model.SysIntegratedManage;
import com.waimaoyun.sys.model.SysIntegratedManageExample;
import com.waimaoyun.sys.model.SysUser;
import com.waimaoyun.sys.service.ISysIntegratedManageService;
import com.waimaoyun.sys.service.ext.K3DefinedSQLService;
import net.sf.json.JSONObject;
import org.apache.http.entity.ContentType;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.PostConstruct;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
public class importExcelByImg extends WebBaseController {@Autowiredprivate  ICrmGoodsService icrmGoodsService;private static ICrmGoodsService crmGoodsService;@Autowiredprivate  ICrmGoodsImgService icrmGoodsImgService;private static ICrmGoodsImgService crmGoodsImgService;@Autowiredprivate  ISysIntegratedManageService isysIntegratedManageService;private static ISysIntegratedManageService sysIntegratedManageService;@Autowiredprivate  K3DefinedSQLService ik3DefinedSQLService;private static K3DefinedSQLService k3DefinedSQLService;@PostConstructprivate void init() {//logger = this.loggerFactory;crmGoodsService = this.icrmGoodsService;crmGoodsImgService = this.icrmGoodsImgService;sysIntegratedManageService = this.isysIntegratedManageService;k3DefinedSQLService = this.ik3DefinedSQLService;}//从03格式excel中获取图片public static Map<String, PictureData> getSheetPictrues03(int sheetNum,HSSFSheet sheet, HSSFWorkbook workbook) {Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();List<HSSFPictureData> pictures = workbook.getAllPictures();if (pictures.size() != 0) {for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();if (shape instanceof HSSFPicture) {HSSFPicture pic = (HSSFPicture) shape;int pictureIndex = pic.getPictureIndex() - 1;HSSFPictureData picData = pictures.get(pictureIndex);/*  String picIndex = String.valueOf(sheetNum) + "_"+ String.valueOf(anchor.getRow1()) + "_"+ String.valueOf(anchor.getCol1());*///String picIndex = String.valueOf(workbook.getSheetAt(sheetNum).getRow(anchor.getRow1()).getCell(0));Object object = getCellValue(workbook.getSheetAt(sheetNum).getRow(anchor.getRow1()), 0);String picIndex = String.valueOf(object);sheetIndexPicMap.put(picIndex, picData);}}return sheetIndexPicMap;} else {return null;}}//07格式excel获取图片。public static Map<String, PictureData> getSheetPictrues07(int sheetNum,XSSFSheet sheet, XSSFWorkbook workbook) {Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();for (POIXMLDocumentPart dr : sheet.getRelations()) {if (dr instanceof XSSFDrawing) {XSSFDrawing drawing = (XSSFDrawing) dr;List<XSSFShape> shapes = drawing.getShapes();for (XSSFShape shape : shapes) {XSSFPicture pic = (XSSFPicture) shape;XSSFClientAnchor anchor = pic.getPreferredSize();CTMarker ctMarker = anchor.getFrom();// BigDecimal bd = new BigDecimal("3.0000856182503598E18");//  System.out.println(String.valueOf(workbook.getSheetAt(sheetNum).getRow(ctMarker.getRow()).getCell(0)));/*  String picIndex = String.valueOf(sheetNum) + "_"+ ctMarker.getRow() + "_" + ctMarker.getCol();*/Object object = getCellValue(workbook.getSheetAt(sheetNum).getRow(ctMarker.getRow()), 0);String picIndex = String.valueOf(object);
//                    pic.getPictureData().getData();sheetIndexPicMap.put(picIndex, pic.getPictureData());}}}return sheetIndexPicMap;}//图片及位置获取public void getAllDate(String excelPath, String dirName, SysAttachmentSetting attachmentSetting) throws Exception {String picBasePath = MainConfig.getRootPath();// 创建文件File file = new File(excelPath);// 创建流InputStream input = new FileInputStream(file);// 获取文件后缀名String fileExt = file.getName().substring(file.getName().lastIndexOf(".") + 1);// 创建WorkbookWorkbook wb = null;// 创建sheetSheet sheet = null;//根据后缀判断excel 2003 or 2007+if (fileExt.equals("xls")) {wb = (HSSFWorkbook) WorkbookFactory.create(input);} else {wb = new XSSFWorkbook(input);}//获取excel sheet总数int sheetNumbers = wb.getNumberOfSheets();// sheet listList<Map<String, PictureData>> sheetList = new ArrayList<Map<String, PictureData>>();// 循环sheetfor (int i = 0; i < sheetNumbers; i++) {sheet = wb.getSheetAt(i);// map等待存储excel图片Map<String, PictureData> sheetIndexPicMap;// 判断用07还是03的方法获取图片if (fileExt.equals("xls")) {sheetIndexPicMap = getSheetPictrues03(i, (HSSFSheet) sheet, (HSSFWorkbook) wb);} else {sheetIndexPicMap = getSheetPictrues07(i, (XSSFSheet) sheet, (XSSFWorkbook) wb);}// 将当前sheet图片map存入listsheetList.add(sheetIndexPicMap);}
//        Map map = getData(excelPath);printImg(sheetList, dirName, attachmentSetting);}/*** 获取单元格值** @param row    获取的行* @param column 获取单元格列号* @return 单元格值*/public static Object getCellValue(Row row, int column) {Object val = "";try {Cell cell = row.getCell(column);if (cell != null) {if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {cell.setCellType(Cell.CELL_TYPE_STRING);val = cell.getStringCellValue();} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {val = cell.getStringCellValue();} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {val = cell.getCellFormula();} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {val = cell.getBooleanCellValue();} else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) {val = cell.getErrorCellValue();}}} catch (Exception e) {return val;}return val;}//将图片保存到指定位置public void printImg(List<Map<String, PictureData>> sheetList, String dirName, SysAttachmentSetting attachmentSetting) throws Exception {List<BaseGoodsImg> baseGoodsImgList = new ArrayList<>();SysUser sysUser = UserUtils.getSysUser();for (Map<String, PictureData> map : sheetList) {Object key[] = map.keySet().toArray();for (int i = 0; i < map.size(); i++) {BaseGoodsImg baseGoodsImg = new BaseGoodsImg();// 获取图片流PictureData pic = map.get(key[i]);// 获取图片索引String picName = key[i].toString();// 获取图片格式String ext = pic.suggestFileExtension();baseGoodsImg.setType(ext);baseGoodsImg.setName(picName + "." + ext);baseGoodsImg.setNumber(picName);//new File(pic.getData().toString());byte[] data = pic.getData();InputStream inputStream = new ByteArrayInputStream(data);MultipartFile file = new MockMultipartFile(ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);// file.getOriginalFilename();JSONObject jsonObject = FileUploadUtils.uploadImageorg(file, dirName, picName + "." + ext);Map<String, Object> pathMap = saveFileForBusinessAttach(jsonObject.get("path").toString(), "crm", "goods", "", "", attachmentSetting);if (pathMap.get("imgpath") != null) {baseGoodsImg.setImgPath(pathMap.get("imgpath").toString());}if (pathMap.get("basepath") != null) {baseGoodsImg.setBasePath(pathMap.get("basepath").toString());}System.out.println(jsonObject);baseGoodsImgList.add(baseGoodsImg);//FileOutputStream out = new FileOutputStream("C:\\Users\\MACHI\\Desktop\\2222\\" + picName + "." + ext);// out.write(data);// out.close();}}List<CrmGoodsImg> goodsImgList = new ArrayList<>();if (baseGoodsImgList.size() > 0) {List<String> bdnumber = baseGoodsImgList.stream().map(BaseGoodsImg::getNumber).collect(Collectors.toList());CrmGoodsExample crmGoodsExample = new CrmGoodsExample();CrmGoodsExample.Criteria criteria = crmGoodsExample.createCriteria();criteria.andNumberIn(bdnumber);criteria.andCompanyIdEqualTo(sysUser.getCompanyId());List<CrmGoods> crmGoodsList = crmGoodsService.selectByExample(crmGoodsExample);for (int i = 0; i < baseGoodsImgList.size(); i++) {CrmGoodsImg crmGoodsImg=  new CrmGoodsImg();BaseGoodsImg baseGoodsImg = baseGoodsImgList.get(i);if (StringUtils.isNotBlank(baseGoodsImg.getNumber())) {List<CrmGoods> crmGoods = crmGoodsList.stream().filter(o -> o.getNumber().equals(baseGoodsImg.getNumber())).collect(Collectors.toList());if (crmGoods.size()>0){CrmGoods crmGoods1=  crmGoods.get(0);crmGoodsImg.setFid(crmGoods1.getId());if (StringUtils.isNotBlank(crmGoods1.getErpId())){crmGoodsImg.setRemarks(crmGoods1.getErpId());}crmGoodsImg.setType(baseGoodsImg.getType());crmGoodsImg.setBasepath(baseGoodsImg.getBasePath());crmGoodsImg.setImgpath(baseGoodsImg.getImgPath());crmGoodsImg.setName(baseGoodsImg.getName());ServletsUtils.initAddModelBaseData(CrmGoodsImg.class, crmGoodsImg, sysUser);goodsImgList.add(crmGoodsImg);}}}//查询有没有同步的配置,没有同步的配置得时候,不用同步SysIntegratedManageExample sysIntegratedManageExample = new SysIntegratedManageExample();SysIntegratedManageExample.Criteria sysIntegratedManageExampleCriteria = sysIntegratedManageExample.createCriteria();sysIntegratedManageExampleCriteria.andCreateIdEqualTo(sysUser.getId());//当前用户的配置的sysIntegratedManageExampleCriteria.andStatusEqualTo("1");//1是启用,0是未启用List<SysIntegratedManage> sysIntegratedManageList = sysIntegratedManageService.selectByExample(sysIntegratedManageExample);String companyId = sysUser.getCompanyId();String manageId = k3DefinedSQLService.selectIntegratedManageIdByCompanyId(companyId);KdWebApiController.setDataCenterId(companyId, manageId);for (int i = 0; i < goodsImgList.size(); i++) {if (sysIntegratedManageList.size()>0&&StringUtils.isNotBlank(goodsImgList.get(i).getRemarks())){String serviceName = "Topview.API.Core.BasicDataAPIService.UploadMaterialImage,Topview.API.Core";K3CloudApi api = new K3CloudApi();long FInterID = Long.parseLong(goodsImgList.get(i).getRemarks());String FAttachmentName = goodsImgList.get(i).getName();String FAttachmentUrl = goodsImgList.get(i).getImgpath();Object[] obj = {FInterID, FAttachmentName, FAttachmentUrl};String result = api.execute(serviceName, obj);logger.info("商品图片同步云星空的结果:" + result + "{}", FInterID);}crmGoodsImgService.insert(goodsImgList.get(i));}}}}

有好的思路或者需要学习讨论之类的,可关注公众号一起学习

导入excel每行的图片并上传(参考。因为不一定适合你)相关推荐

  1. Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档

    Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...

  2. php ios视频文件上传,iOS实现视频和图片的上传思路

    关于iOS如何实现视频和图片的上传, 我们先理清下思路,然后小编根据思路一步一步给大家详解实现过程. 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. ...

  3. 点击按钮出现图片_坪山电动车上牌丨部分手机点击拍摄按钮,页面没有反应,无法拍摄人脸图片或上传照片,为什么?...

    戳蓝字关注,骑行要备案,安全常相伴大家好!我是「帮你电动车轻松上牌的」小易今天继续解答广大深圳电动车车主,在操作"易骑行"小程序进行电动车备案,以及深圳电动车上牌骑行过程中遇到的常 ...

  4. axios文件上传 formdata_基于业务场景下的图片/文件上传方案总结

    图片/文件上传组是企业项目开发中必不可少的环节之一, 但凡涉及到用户模块的都会有图片/文件上传需求, 在很多第三方组件库(ant desigin, element ui)中它也是基础组件之一. 接下来 ...

  5. html5在线裁剪,HTML5 本地裁剪图片并上传至服务器(老梗)

    很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 ...

  6. tornado完成一个简单的登录界面/图片的上传

    # 对程序中可能经常变化的值应该提取到配置文件中 # 创建文件夹在文件夹下创建file,充当配置文件 from tornado.httpserver import HTTPServer from to ...

  7. Flutter ——图片九宫格,多图片批量上传(图片选择采用官方image_picker实现,批量上传采用dio,消息提示)

    需求:实现一个九宫格的效果,要求能够多选照片. 具体描述: 1.实现类似微信九宫格,没图片的时候有一张添加图片,点击该图片可以在相册中选择,当图片未满9个的时候,该图片一直跟在最后,当图片满足9个的时 ...

  8. web 前端图片优化之--图片压缩上传

    移动前端-图片压缩上传实践  此前有同事跟我聊过关于移动端用canvas压缩图片后再上传的功能,最近有了点空闲时间,所以就实践了一下.demo效果链接在文章底部贴出. 在做移动端图片上传的时候,用户传 ...

  9. uniapp做小程序的图片(视频)上传的组件封装

    最近在做小程序,最后想试试新不同的技术,所以选择了用uniapp做小程序. 要求实现多张图片的上传 ,可以限制图片上传的数量,图片预览,多次使用对图片的上传顺序排序 <template>& ...

最新文章

  1. Windows常用工具
  2. 为什么 MySQL 的自增主键不单调也不连续
  3. 本弗莱数据可视化的生产流程图_力控锂离子电池车间数据采集系统
  4. adb push和pull使用
  5. 【直播课】6小时教你掌握轻量级网络,在安卓部署第一个深度学习模型
  6. ssl1626-花店橱窗布置【日常dp】
  7. Taro+react开发(15)--对应文件编译
  8. 单词的长度(信息学奥赛一本通-T1142)
  9. 深度认识区块链---从底层原理到应用场景
  10. 确定对象在使用前已经被初始化
  11. Dubbo系列(1)_背景介绍和基本情况
  12. Centos解决ppp: compressor dropped pkt
  13. 时序数据库 VS 工业实时数据库
  14. 大数据之路之交通大数据应用总体架构设计
  15. Windows快速更改IP脚本
  16. 整理了上千个Python类库,简直太酷啦!
  17. 第三届太原理工大学程序设计竞赛新生赛(未完结)
  18. 寂然安静到鸿蒙翻译,明道篇
  19. usb接上计算机没反应怎么办,u盘插上去电脑没反应怎么办 u盘插上后无任何反应的解决教程...
  20. 深入研究 CSSfloat属性

热门文章

  1. windows php 多线程
  2. ABAP开发smartforms的打印问题小数位的逗号设置成小数点
  3. backtrader量化平台教程(二)第一个可用的策略
  4. List集合存储学生对象用三种方式遍历
  5. 对rar文件的解压缩,对zip文件的压缩与解压缩
  6. APP+spring boot学业指导系统 毕业设计源码030958
  7. java proguard_java混淆之proguard
  8. mybatis通用mapper的使用
  9. html canvas生成图片,html5 canvas画板涂鸦生成图片代码
  10. NLog简单使用教程