java导入excel图片处理

直接看代码吧,主要逻辑吧excel的图片拿到 压缩上传获取url

java 复制代码
 // 将文件转成XSSFWorkbook工作簿
        XSSFWorkbook wb = new XSSFWorkbook(uploadFile);
        // 获取工作薄中第一个excel表格
        XSSFSheet sheet = wb.getSheetAt(0);
        // 核心:::获取excel表格中所有图片,处理图片上传到oss  key:行号-列号
        Map<String, List<String>> picturesMap = getPictures(sheet);
        public Map<String, List<String>> getPictures(XSSFSheet xssfSheet) throws IOException {

        Map<String, List<String>> maps = new LinkedHashMap<>();
        List<XSSFShape> list = xssfSheet.getDrawingPatriarch().getShapes();

        for (int i = 0; i < list.size(); i++) {
            XSSFPicture picture = (XSSFPicture) list.get(i);
            // 行号-列号
            XSSFClientAnchor xssfClientAnchor = (XSSFClientAnchor) picture.getAnchor();
            // 获取图片
            XSSFPictureData pdata = picture.getPictureData();
            byte[] data = pdata.getData();
            InputStream inputStream = new ByteArrayInputStream(data);
            byte[] scalePicLater = scalePics(inputStream,0.5,0.5);
            String url = ossFactory.build().upload(new ByteArrayInputStream(scalePicLater), IdUtil.objectId() + ".jpg");
            inputStream.close();

            // 行号-列号
            String key = xssfClientAnchor.getRow1() - 1 + "-" + xssfClientAnchor.getCol1();
            if (maps.containsKey(key)) {
                List<String> strUrl = maps.get(key);
                strUrl.add(url);
                maps.put(key, strUrl);
            } else {
                List<String> strUrl = new ArrayList<>();
                strUrl.add(url);
                maps.put(key, strUrl);
            }


        }
        return maps;
    }




public static byte[] scalePics(InputStream inputStream, double accuracy,double scale) throws IOException {
        // 压缩图片并保存到临时文件中
        File tempFile = File.createTempFile("thumbnail", ".jpg");
        Thumbnails.of(inputStream)
                .scale(scale)
                .outputQuality(accuracy)
                .toFile(tempFile);
        // 读取临时文件的字节流设置到输出流中
        InputStream tempInputStream = new FileInputStream(tempFile);
        byte[] buffer = new byte[tempInputStream.available()];
        tempInputStream.read(buffer);
        tempInputStream.close();
        // 删除临时文件
        tempFile.delete();
        // 下载到本地,
        // BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Code\\upload\\1.jpg"));
        // bos.write(buffer);
        // bos.close();
        return buffer;
    }
相关推荐
xcLeigh32 分钟前
Go入门:变量声明的五种方式详解
java·开发语言·golang
AI大模型-小华1 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
Mark_ZP1 小时前
【锁1】Synchronized vs ReentrantLock区别
java
立心者02 小时前
SpringBoot中使用TOTP实现MFA(多因素认证)
java·spring boot·后端
枕星而眠2 小时前
C++ STL Map容器完全指南:从有序红黑树到无序哈希表
java·开发语言
逃逸线LOF3 小时前
Spring配置数据源{连接池}(Druid、c3p0)
java·数据库·spring
bbq粉刷匠3 小时前
HashMap 底层原理深度拆解(二):putVal 完整链路解析(懒加载 · 链表遍历 · 尾插法)
java·开发语言·哈希算法
Sam_Deep_Thinking3 小时前
一个靠谱的C端网关服务应该包含什么内容
java·程序员·系统架构
杨运交4 小时前
[055][调度模块]Spring动态任务调度框架的设计与实现
java·后端·spring
白狐_7984 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法