栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

POI导入并上传图片

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

POI导入并上传图片

导入相关POI maven

        
        
            org.apache.poi
            poi
            4.0.1
        
        
            org.apache.poi
            poi-ooxml
            4.0.1
        

xls和xlsx获取图片方式是不同的所以判断一下后缀

            String type = file.getOriginalFilename();
            if (type.endsWith(".xls")){
              maplist = getPictures1((HSSFSheet) s);
            } if (type.endsWith(".xlsx")){
              maplist = getPictures2((XSSFSheet) s);
            }
获取图片和位置(xls)
public static Map getPictures1 (HSSFSheet sheet) {
        Map map = new HashMap();
        List list = sheet.getDrawingPatriarch().getChildren();
        for (HSSFShape shape : list) {
            if (shape instanceof HSSFPicture) {
                HSSFPicture picture = (HSSFPicture) shape;
                HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();
                PictureData pdata = picture.getPictureData();
                String key = cAnchor.getRow1() + "-" + cAnchor.getCol1(); // 行号-列号
                map.put(key, pdata);
            }
        }
        return map;
    }
获取图片和位置(xlsx)
public static Map getPictures2 (XSSFSheet sheet)  {
        Map map = new HashMap();
        List list = sheet.getRelations();
        for (POIXMLdocumentPart part : list) {
            if (part instanceof XSSFDrawing) {
                XSSFDrawing drawing = (XSSFDrawing) part;
                List shapes = drawing.getShapes();
                for (XSSFShape shape : shapes) {
                    XSSFPicture picture = (XSSFPicture) shape;
                    XSSFClientAnchor anchor = picture.getPreferredSize();
                    CTMarker marker = anchor.getFrom();
                    String key = marker.getRow() + "-" + marker.getCol();
                    map.put(key, picture.getPictureData());
                }
            }
        }
        return map;
    }

xlsx和xls读取的都是sheet全部的图片key存储的是坐标,所以一获取想要获取指定文件传入对应坐标就可以了。因为业务逻辑规定图片只能存储在第一列所以这边只需要传入对应的row就可以了。

PictureData pictureData = maplist.get(rowlenth + "-" + 0);
        String path = "";
        if (pictureData != null) {
            byte[] bytes = pictureData.getData();
            InputStream sbs = new ByteArrayInputStream(bytes);
            path = uploadImg(sbs);
            log.info("头像上传成功,path:"+path);
        }
        vtCandidate.setIconUploaded(path);
POI中pictureData.getData();方法获取的是byte字节 上传图片是需要讲其转化为InputStream

至此大功告成!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696725.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号