首页 > 其他分享 >文件打成压缩包

文件打成压缩包

时间:2024-01-10 13:22:22浏览次数:20  
标签:文件 java zip 打成 fileName new import response 压缩包

将多个文件打成压缩包

引入依赖

 <!-- io常用工具类 -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>

自己封装成 对应的Service层,就可以了

package com.dem.ceshiDemo.controller;

import com.dem.ceshiDemo.util.StringUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author lichangben
 * @date 2021/8
 */
@Controller
public class CompressController {
    @GetMapping("/download")
    public void packagingDownload(HttpServletResponse response, String busiSn) {

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ZipOutputStream zip = new ZipOutputStream(outputStream);
        //记录 文件名存在数量
        Map<String,Integer> map = new HashMap<>();
        try{
            //遍历文件 将所有文件放入压缩包 (这里模仿多个文件进行压缩)
            for (int i = 0; i < 5; i++) {
                //原文件名称 (模仿一下 对象)
                String prefix = "dem";
                String suffix = "jpg";
                String fileName = prefix + "." + suffix;
                //判断文件名称是否存在
                if(StringUtils.isNotEmpty(StringUtils.getString(map,fileName))){
                    Integer num = map.get(fileName);
                    map.put(fileName,num+1);
                    fileName = prefix+"("+ num +")."+suffix;
                }else{
                    //不存在
                    map.put(fileName,1);
                }

                //每个文件的文件名称
                zip.putNextEntry(new ZipEntry(fileName));
                // 获取文件地址
                String fileAddress = "https://z3.ax1x.com/2021/08/18/foZvJs.jpg";

                URL url = new URL(fileAddress);
//                System.out.println(url);
                URLConnection connection = url.openConnection();
                InputStream fis = connection.getInputStream();
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] b = new byte[1024];
                int n;
                while ((n = fis.read(b)) != -1)
                {
                    bos.write(b, 0, n);
                }
                fis.close();
                bos.close();
                //生成文件内容
                IOUtils.write(bos.toByteArray(), zip);
                zip.flush();
                zip.closeEntry();
            }

            IOUtils.closeQuietly(zip);
            byte[] data = outputStream.toByteArray();
            response.reset();
            String filename = URLEncoder.encode("压缩包名称(中文需要转码,一般时间戳或者yyyyMMddhhmmss).zip", "UTF-8");
            response.setHeader("Content-Disposition", "attachment; filename="+filename);
            response.addHeader("Content-Length", "" + data.length);
            response.setContentType("application/octet-stream; charset=UTF-8");
            IOUtils.write(data, response.getOutputStream());
        }catch (Exception e){
            e.printStackTrace();
            /*"文件压缩失败,请确定文件存在后进行操作!"*/
            throw new RuntimeException(e.getMessage());
        }

    }

}

标签:文件,java,zip,打成,fileName,new,import,response,压缩包
From: https://www.cnblogs.com/lichangben/p/17956179

相关文章

  • explorer.exe 无法访问指定设备路径或文件。你可能没有适当的权限访问该项目。
    亲测有效。电脑用的好好的,一会儿没用,突然只能找开部分软件,打不开文件夹和开始菜单了,弹出标题说的问题。试了其它软件如微信都可以使用,除了第三方下载的软件,系统自带的都打不开,会弹出提示,打开我的电脑和文件夹也是会弹出提示。并且下方任务栏WIN开始打不开,时钟和通知都点不开,不......
  • Python操作XML文件一文通
    我们经常需要解析用不同语言编写的数据,Python提供了许多第三方库来解析或拆分用其他语言编写的数据,今天我们来学习下PythonXML解析器的相关功能。下面一起来看看吧~什么是XML?XML是可扩展标记语言,它在外观上类似于HTML,但XML用于数据表示,而HTML用于定义正在使用的数据。XM......
  • Java字节码文件详解​
    03.字节码文件详解JVM的组成从字节码文件的执行流程看JVM的组成:1.准备好字节码文件(自己编译或其他人传给你)2.使用类加载器ClassLoader加载(此时JVM已参与)3.运行时数据(JVM管理的内存)4.执行引擎(即时编译器、解释器垃圾回收器等):将字节码文件中的指令解释成机器码,同时使用即时编译器优化......
  • Qt 快速读取大文件最后一行内容
    0.前言有时候根据需求,需要读取文本的最后一行内容。如果是小文本,按照顺序读,然后取最后一行就Ok;但如果是大文本,即使是放到线程里跑,读取到最后一行也会有延迟,比较耗时。1.解决方案查看QFile帮助手册,其有boolseek(qint64pos);意思就是查找设备中的位置。成功时返回true;否......
  • 如何使用Jamf管理Apple文件保险箱
    在当今的移动工作和教育环境中,Apple设备的一个关键功能是内置的macOS加密技术,该技术保护组织数据和用户隐私。配备AppleM1芯片的最新计算机还具有额外的加密功能。虽然这些安全层有助于保护最终用户手中的设备,无论他们在哪里工作或学习,但这也意味着Mac管理员需要加密特权来......
  • shell命令mac怎么批量重命名某个目录下的文件
    在Mac上批量重命名文件很简单,你可以使用“终端”应用程序或者Finder中的“批量重命名”功能。下面是两种方法:使用终端:打开终端应用程序。使用cd命令切换到目标目录,例如:cd/路径/到/你的/目标目录使用mv命令进行批量重命名,例如:forfilein*;domv"$file""新名称${file##*_}";do......
  • cfs文件系统只读监控
    一、需求有重要文件存放在cfs文件系统(CloudFileStorage),该文件丢失对业务有严重影响,为确保文件系统可用性,防止出现只读、挂载失败等异常,现对改文件系统进行监控。二、监控原理每分钟往cfs文件系统写入文件,文件名依据当前分钟动态生成,文件格式为"2023-12-08_16:35"。监控对象为该文......
  • 2023年最具影响力的十大网络安全事件,文件销毁 硬盘销毁
    被业内人士定性为网络安全“灾年”的2023年已经翻篇,但过去一年发生的创记录的数据泄露、勒索软件、零日漏洞、间谍软件和供应链攻击事件已经为2024年全球网络安全威胁态势定下了主旋律和基调。以下我们将回顾各行业2023年最具影响力和破坏力的十大网络安全事件,回顾并总结这些事件将......
  • linux-查看文件(夹)数量
    在linux中使用man[命令],可以查看完整的命令帮助文档。ls命令中,我们常用的选项在帮助文档中的解释是:ls-listdirectorycontents.(外出目录内容)-a,--all-l,--usealoglistingformat(使用日志列表格式)-h,--humanreadablewith-l,printsizesinhumanreadable......
  • 低代码开发中的文件上传与数据处理:实战指南
    在当今的信息化时代,数据已成为企业的重要资产。为了更好地管理和利用这些数据,许多企业开始采用表单上传组件来导入和处理数据。通过使用表单上传组件,用户可以方便地将文件上传至系统中,然后进行后续的数据处理和分析。这种方式的优点在于,用户无需掌握复杂的编程技术,即可完成数据导入......