首页 > 其他分享 >从excel列表读取图片,上传并匹配--基于03版

从excel列表读取图片,上传并匹配--基于03版

时间:2024-07-24 17:41:48浏览次数:10  
标签:03 String -- excel 图片 new imagemap row

主要思路:
1.读取所有图片,先传到服务器本地,用row行编号命名图片名称.
2.传到图片服务器,获取图片url
3.与excel其它数据行匹配

--------------- 不知为啥首尾两行不进去的分割线 ------------------------------ public void importExcel(MultipartFile files) throws Exception {

    InputStream inputStream = files.getInputStream();
    ExcelReader excelReader = ExcelUtil.getReader(inputStream);
   
    Workbook workbook = excelReader.getWorkbook();
    HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0);
    //excel2003
    if(workbook instanceof HSSFWorkbook){

    }else if (workbook instanceof XSSFWorkbook){
		//07的是XSSF,目前只考虑03
        //excel 2007
        log.info("##### 暂时只支持2003excel");
        return;
    }

    //excel上传图片到本地
    List<String> urlList=new ArrayList<>();
    for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
        HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
		  if (shape instanceof HSSFPicture) {
            HSSFPicture pic = (HSSFPicture) shape;
            //获取行编号,放在图片名字里,用于后面与excel其它数据行匹配
            int row = anchor.getRow2();
            //获取列编号
            int col = anchor.getCol2();
            log.info("####### row: "+row+" ###### col:"+col);

            HSSFPictureData pictureData = pic.getPictureData();
            //图片扩展名
            String fileSuffix = pictureData.suggestFileExtension();
            String url = "//data//test//img//"+ RandomUtil.randomString(10)+"_"+row+"."+fileSuffix;
       
            FileUtil.writeBytes(pictureData.getData(), url);
            urlList.add(url);
        }
    }
	
	 //上传图片到fastdfs
    Map<String,List> imagemap=new HashMap<>();
    for (int i = 0; i < urlList.size(); i++) {
        String localimageUrl = urlList.get(i);
        log.info("####### 上传的图片地址"+localimageUrl);
        File file =new File(localimageUrl);

        FileInputStream fileInputStream = new FileInputStream(file);
        MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(), ContentType.IMAGE_JPEG.toString(), fileInputStream);

		//转为MultipartFile传到fastdfs,也许有更好方法,此方法为fasedfs常用方法,因此不再赘述
        StorePath storePath = fastFileStorageClientUtil.uploadFile(multipartFile);
        String fullPath = storePath.getFullPath();
        log.info("######### fullPath: "+ fullPath);

        //获取本地图片row编号与真实图片url整理为map,key为row行号
        String[] split = localimageUrl.split("\\.");
        String imageName = split[0];
        String[] imageNo = imageName.split("_");
		 String row = imageNo[1];
        if(ObjectUtil.isEmpty(imagemap.get(row))){
            List a =new ArrayList();
			//拼上完整域名,此变量需自己定义
            a.add(WebUrl+fullPath);
            imagemap.put(row,a);
        }else{
            List list = imagemap.get(row);
            list.add(WebUrl+fullPath);
            imagemap.put(row,list);
        }
    }
    log.info("######### imagemap: "+ JSONUtil.toJsonStr(imagemap));
	
	
	 // 读取其它excel数据
    List<List<Object>> read = excelReader.read(1, excelReader.getRowCount());
	    for (int i = 0; i < read.size(); i++) {
			//获取excel本行图片列表
			List<String> list = imagemap.get(String.valueOf(i+1));
			
			//其它业务代码,根据自己需要实现.....
			

			
		}

}`
--------------- 不知为啥首尾两行不进去的分割线 ------------------------------

`

标签:03,String,--,excel,图片,new,imagemap,row
From: https://www.cnblogs.com/lpcyj/p/18321386

相关文章

  • 01.计算机组成原理和结构
    01.计算机组成原理和结构目录介绍01.计算机底层知识1.1计算机基础组成1.2理论和实践相结合02.计算机基本硬件2.1基本硬件组成2.2输入和输出设备03.冯·诺依曼体系结构3.1存储程序计算机3.2冯·诺依曼描述计算机3.3抽象计算机框架3.4冯·诺依曼体系延......
  • 信效度分析
    一、信度的概念注:概念部分内容均来自书目——《心理与教育测量》。1.信度是指测量结果的稳定性程度。换句话说,若能用同一测量工具反复测量某人的同一种心理特质,则其多次测量结果间的一致性程度就叫作信度,有时也叫作测量的可靠性。2.信度是衡量一个量表质量高低的重要指标之一,信......
  • pycharm配置及python环境相关配置
     python虚拟环境不同项目依赖的第三方包的版本可能不一样,这样一个环境就没法同时开发不同的项目,所以需要创建不同的虚拟环境virtualenv用户创建独立的python环境,多个python项目互相独立互不影响安装方法pipinstallvirtualenv创建虚拟环境virtualenvvenv会......
  • VirtualBox 虚拟机识别主机接入的USB
    ###环境我当前的主机系统是Ubuntu20.04.6LTS,由于鸿蒙开发工具只有win和mac,我选择开个win的虚拟机。我使用的虚拟机是VirtualBox7.0.18,系统是win10,前面已经安装完成。鸿蒙开发环境已经在VBox中配置完成,创建项目后无法连接开发者手机,发现VBox没有启用USB。 ###解决方法......
  • Adobe Illustrator 和 Photoshop 迎来新 AI 功能;马斯克将训练全球最强 AI丨 RTE 开发
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • 【shell】变量运算
    变量与数字的运算算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。—+:对两个变量做加法。—-:对两个变量做减法。—*:对两个变量做乘法。—/:对两个变量做除法。—**:对两个变量做幂运算。—%:取模运算,第一个变......
  • 【组件开发】基于elementplus组件开发的audio音频播放器
    1<template>2<divclass="my-audio">3<!--音频播放器,使用timeupdate事件更新播放进度-->4<audio@timeupdate="updateProgress"controlsref="audioRef">5<source:src="audioUrl&quo......
  • 解决小程序web-view两个恶心问题
    ......
  • es:常用命令
    一,查看es的相关信息:1,查看集群的健康状态liuhongdi@lhdpc:/usr/local/soft$curl-XGEThttp://127.0.0.1:9200/_cat/health172181039608:39:56elasticsearchgreen11110000-100.0%2,查看状态:liuhongdi@lhdpc:/usr/local/soft$curl-XGET"http://127.0.0.1:92......
  • ESP32S3之JTAG调试OPENOCD服务启动失败
    OpenOCDserverisnotrunning![OpenOCD]❌Error:libusb_open()failedwithLIBUSB_ERROR_NOT_FOUND[OpenOCD]❌Error:esp_usb_jtag:couldnotfindoropendevice!OpenOCD打开不成功主要是驱动程序不对修复方法使用Zadig,来修改驱动程序降级之后的驱动,是由哪里......