导入excel每行的图片并上传(参考。因为不一定适合你)
场景:需要导入一个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每行的图片并上传(参考。因为不一定适合你)相关推荐
- Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档
Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...
- php ios视频文件上传,iOS实现视频和图片的上传思路
关于iOS如何实现视频和图片的上传, 我们先理清下思路,然后小编根据思路一步一步给大家详解实现过程. 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. ...
- 点击按钮出现图片_坪山电动车上牌丨部分手机点击拍摄按钮,页面没有反应,无法拍摄人脸图片或上传照片,为什么?...
戳蓝字关注,骑行要备案,安全常相伴大家好!我是「帮你电动车轻松上牌的」小易今天继续解答广大深圳电动车车主,在操作"易骑行"小程序进行电动车备案,以及深圳电动车上牌骑行过程中遇到的常 ...
- axios文件上传 formdata_基于业务场景下的图片/文件上传方案总结
图片/文件上传组是企业项目开发中必不可少的环节之一, 但凡涉及到用户模块的都会有图片/文件上传需求, 在很多第三方组件库(ant desigin, element ui)中它也是基础组件之一. 接下来 ...
- html5在线裁剪,HTML5 本地裁剪图片并上传至服务器(老梗)
很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 ...
- tornado完成一个简单的登录界面/图片的上传
# 对程序中可能经常变化的值应该提取到配置文件中 # 创建文件夹在文件夹下创建file,充当配置文件 from tornado.httpserver import HTTPServer from to ...
- Flutter ——图片九宫格,多图片批量上传(图片选择采用官方image_picker实现,批量上传采用dio,消息提示)
需求:实现一个九宫格的效果,要求能够多选照片. 具体描述: 1.实现类似微信九宫格,没图片的时候有一张添加图片,点击该图片可以在相册中选择,当图片未满9个的时候,该图片一直跟在最后,当图片满足9个的时 ...
- web 前端图片优化之--图片压缩上传
移动前端-图片压缩上传实践 此前有同事跟我聊过关于移动端用canvas压缩图片后再上传的功能,最近有了点空闲时间,所以就实践了一下.demo效果链接在文章底部贴出. 在做移动端图片上传的时候,用户传 ...
- uniapp做小程序的图片(视频)上传的组件封装
最近在做小程序,最后想试试新不同的技术,所以选择了用uniapp做小程序. 要求实现多张图片的上传 ,可以限制图片上传的数量,图片预览,多次使用对图片的上传顺序排序 <template>& ...
最新文章
- Windows常用工具
- 为什么 MySQL 的自增主键不单调也不连续
- 本弗莱数据可视化的生产流程图_力控锂离子电池车间数据采集系统
- adb push和pull使用
- 【直播课】6小时教你掌握轻量级网络,在安卓部署第一个深度学习模型
- ssl1626-花店橱窗布置【日常dp】
- Taro+react开发(15)--对应文件编译
- 单词的长度(信息学奥赛一本通-T1142)
- 深度认识区块链---从底层原理到应用场景
- 确定对象在使用前已经被初始化
- Dubbo系列(1)_背景介绍和基本情况
- Centos解决ppp: compressor dropped pkt
- 时序数据库 VS 工业实时数据库
- 大数据之路之交通大数据应用总体架构设计
- Windows快速更改IP脚本
- 整理了上千个Python类库,简直太酷啦!
- 第三届太原理工大学程序设计竞赛新生赛(未完结)
- 寂然安静到鸿蒙翻译,明道篇
- usb接上计算机没反应怎么办,u盘插上去电脑没反应怎么办 u盘插上后无任何反应的解决教程...
- 深入研究 CSSfloat属性