springboot解压文件流zip压缩包

springboot解压文件流zip压缩包

原始文件存储的地方:
在这里插入图片描述
需要在当前目录下解压该文件,如下图:
在这里插入图片描述

代码示例:

private Result<String> getLocationGuideLayerName(YbYstbtqTaskResolveParam params, String fishnetLayerName) throws IOException {
        // 获取文件(这里的方法是系统的根据文件id获取文件相关的信息)
        FileDownloadVo fileDownloadVo = uploadService.getFile(params.getFileId());
        List<AnnexPO> fileInfo = uploadService.getFileInfo(new ArrayList<>(Collections.singletonList(params.getFileId())));

        if (fileInfo.size() < 1) {
            throw new RuntimeException("shp文件无效,请重试!");
        }

        ZipInputStream zis = new ZipInputStream(fileDownloadVo.getFileStream());
        ZipEntry zipEntry = zis.getNextEntry();

        // 文件存储目录+文件名字
        String filePathTemp = removeLastSlash(uploadConfig.getLocalStorageDirectory()) + fileInfo.get(0).getUploadPath(); // F:\temp\20240708\acbcac4038da45dfa77a3142e9a46501\测试数据2023SAR.zip
        // 文件存储目录不加文件名
        String newFilePath = formatFilePath(filePathTemp); // F:\temp\20240708\acbcac4038da45dfa77a3142e9a46501
        try {
            // 遍历ZIP文件中的每个条目
            while (zipEntry != null) {
                String filePath = newFilePath + File.separator + zipEntry.getName();
                if (!zipEntry.isDirectory()) {
                    // 提取文件-遍历提取整个zip的所有文件
                    extractFile(zis, filePath);
                    // 关闭当前条目以读取下一个条目
                    zis.closeEntry();
                }
                zipEntry = zis.getNextEntry();
            }
            // 关闭ZIP输入流
            zis.close();
        } catch (IOException e) {
            throw new RuntimeException("提取shpe文件失败: " + fileDownloadVo.getFileName() + ". 请重试!", e);
        }
    }


	/**
     * 辅助方法,用于从ZIP输入流中提取文件
     *
     * @param zis ZIP输入流
     * @param filePath 文件的完整路径
     * @throws IOException 如果发生I/O错误
     */
    private void extractFile(ZipInputStream zis, String filePath) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        byte[] bytesIn = new byte[4096];
        int read = 0;
        while ((read = zis.read(bytesIn)) != -1) {
            bos.write(bytesIn, 0, read);
        }
        bos.close();
    }

	/**
     * @Description: 格式化文件路径,返回文件存储的路径
     *
     * @Param:  [path]
     * @Return: java.lang.String
     * @Author yanghaoxing
     * @Date 2024/7/8 11:27
     */
    public String formatFilePath(String path) {
        String newPath = path;
        // 找到最后一个'/'的索引位置
        int lastIndex = path.lastIndexOf('/');
        if (lastIndex != -1) { // 确保lastIndexOf找到了'/'
            newPath = path.substring(0, lastIndex);
        }
        return newPath;
    }

	/**
     * @Description: 去掉字符串最后一个 /
     *
     * @Param:  [str]
     * @Return: java.lang.String
     * @Author yanghaoxing
     * @Date 2024/7/8 11:17
     */
    public static String removeLastSlash(String str) {
        if (str != null && str.endsWith("/")) {
            return str.substring(0, str.length() - 1);
        }
        return str; // 不改变原字符串,如果它不以'/'结尾
    }


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/783244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

我们严重低估了MiniMax;扎克伯格站在了奥特曼的对面;欧洲最强大模型的天才创始人;Notion AI在LLM来临时快速转身奔跑 | ShowMeAI

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; 1. MiniMax 创始人闫俊杰&#xff1a;我选的技术路线是上限最高的&#xff0c;几乎没有退路&#xff0c;选的算力方式也激进 MiniMax 官网 → https:…

30多款简洁个人博客网站网页模板演示学习

30多款个人博客个人网站divcss,html在线预览,静态页面模板免费下载.这些简洁和优雅的博客网页模板,为那些想成为创建博客的个人或媒体提供灵感设计。网页模板可以记录旅游、生活方式、食品或摄影博客等网站。 http://www.bokequ.com/blog/1/ http://www.bokequ.com/blog/2/ htt…

近千含分步骤做法图片菜谱ACCESS\EXCEL数据库

菜谱类的数据已经有一些了&#xff0c;比如《近5万份有图菜谱大全》、《3万多条含图片的菜谱资料数据库》、《无图片的2万多条菜谱》、《5000个菜谱食谱大全》、《4千多带图片的美食菜谱数据内容采集》&#xff0c;但是我还是偏向更喜欢有步骤图片的菜谱&#xff0c;比如《2千8…

2025 百度提前批校招内推

百度2025校园招聘内推开始啦&#xff0c;被推荐人可以免笔试直接面试&#xff0c;提前批结果不影响校招&#xff0c;机会1&#xff0c;还可直推心仪部门&#xff0c;可扫描下面二维码或点击链接进行投递&#xff0c;快来投递你心仪的职位吧&#xff08; 网申链接地址 &#xff…

机器学习的遗忘——基于文章“Forgetting“ in Machine Learning and Beyond: A Survey

文章概要 这篇调查文章仅关注选择性遗忘&#xff0c;承认遗忘某些信息可以通过允许模型优先考虑和保留更重要或相关的信息&#xff0c;以及保护用户隐私&#xff0c;从而带来好处。选择性遗忘&#xff08;Selective forgetting&#xff09;涉及有选择地忽略无关或噪声数据。这…

C语言 | Leetcode C语言题解之第220题存在重复元素III

题目&#xff1a; 题解&#xff1a; struct HashTable {int key;int val;UT_hash_handle hh; };int getID(int x, long long w) {return x < 0 ? (x 1ll) / w - 1 : x / w; }struct HashTable* query(struct HashTable* hashTable, int x) {struct HashTable* tmp;HASH_F…

亚马逊如何用自养号测评打造权重提升排名带来更多的自然流量

亚马逊通过自养号测评来提升流量是一种被广泛采用的运营手段&#xff0c;它可以帮助卖家快速提高商品的曝光度和吸引潜在买家。以下是自养号测评的详细分析&#xff1a; 一、自养号测评的定义与原理 自养号测评是指卖家通过注册并管理海外买家账号&#xff0c;对自家商品进行…

PyQT: 开发一款ROI绘制小程序

在一些基于图像或者视频流的应用中&#xff0c;比如电子围栏/客流统计等&#xff0c;我们需要手动绘制一些感兴趣&#xff08;Region of Interest&#xff0c;简称ROI&#xff09;区域。 在这里&#xff0c;我们基于Python和PyQt5框架开发了一款桌面应用程序&#xff0c;允许用…

java中Request和Response的详细介绍

1.Request和Response的概述 # 重点 1. service方法的两个参数request和response是由tomcat创建的void service(ServletRequest var1, ServletResponse var2) 2. request 表示请求数据, tomcat将浏览器发送过来的请求数据解析并封装到request对象中servlet开发者可以通过reques…

AI免费英语学习在线工具:Pi;gpt;其他大模型AI 英语学习智能体工具

1、pi(强烈推荐&#xff1a;可以安卓下载使用) https://pi.ai/talk &#xff08;网络国内使用方便&#xff09; 支持实时聊天与语音对话 2、chatgpt&#xff08;强烈推荐&#xff1a;可以安卓下载使用) https://chat.openai.com/ &#xff08;网络国内使用不方便&#xf…

element-ui el-select选择器组件下拉框增加自定义按钮

element-ui el-select选择器组件下拉框增加自定义按钮 先看效果 原理&#xff1a;在el-select下添加禁用的el-option&#xff0c;将其value绑定为undefined&#xff0c;然后覆盖el-option禁用状态下的默认样式即可 示例代码如下&#xff1a; <template><div class…

27_电子电路设计基础

电路设计 电路板的设计 电路板的设计主要分三个步骤&#xff1a;设计电路原理图、生成网络表、设计印制电路板。 (1)设计电路原理图&#xff1a;将元器件按逻辑关系用导线连接起来。设计原理图的元件来源是“原理图库”,除了元件库外还可以由用户自己增加建立新的元件&#…

@Builder注解详解:巧妙避开常见的陷阱

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 Builder注解详解&#xff1a;巧妙避开常见的陷阱 前言1. Builder的基本使用使用示例示例类创建对…

YOLOv5改进系列(32)——替换主干网络之PKINet(CVPR2024 | 面向遥感旋转框主干,有效捕获不同尺度上的密集纹理特征)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2)——添加CBAM注意力机制 YOLOv5改进系列(3)——添加CA注意力机制 YOLOv5改进系列(4)——添加ECA注意力机制 YO…

21. Java AQS 原理

1. 前言 本节内容主要是对 AQS 原理的讲解&#xff0c;之所以需要了解 AQS 原理&#xff0c;是因为后续讲解的 ReentrantLock 是基于 AQS 原理的。本节内容相较于其他小节难度上会大一些&#xff0c;基础薄弱的学习者可以选择性学习本节内容或者跳过本节内容。 了解什么是 AQ…

从无计划到项目管理高手,只需避开这两大误区!

在项目管理的过程中&#xff0c;制定计划是不可或缺的一环。然而&#xff0c;在实践中&#xff0c;我们往往会遇到两种常见的误区&#xff0c;这些误区不仅阻碍了计划的有效实施&#xff0c;还可能让我们在追求目标的道路上迷失方向。 误区一&#xff1a;认为没有什么可计划的…

Nacos 国际化

项目需要&#xff0c;后端异常信息需要进行国际化处理。所有想有没有方便易用的可选项。 1、国际化配置调整&#xff0c;不需要重启系统 2、可支持添加不同或自定义语言包&#xff08;就是配置的资源文件&#xff09; 参考&#xff1a; Nacos实现SpringBoot国际化的增强_spr…

硅纪元视角 | Speak火了!3个月收入翻倍,OpenAI为何频频下注?

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

LabVIEW自动探头外观检测

开发了一套基于LabVIEW的软件系统&#xff0c;结合视觉检测技术&#xff0c;实现探头及连接器外观的自动检测。通过使用高分辨率工业相机、光源和机械手臂&#xff0c;系统能够自动定位并检测探头表面的细微缺陷&#xff0c;如划痕、残胶、异色、杂物等。系统支持多种探头形态&…

王老师 linux c++ 通信架构 笔记(二)

&#xff08;7&#xff09;本条目开始配置 linux 的固定 ip 地址&#xff0c;以作为服务器使用&#xff1a; 首先解释 linux 的网口编号&#xff1a; linux 命令 cd &#xff1a; change directory 改变目录。 ls &#xff1a; list 列出某目录下的文件 根目录文件名 / etc &a…