手把手教你用SpringBoot将文件打包成zip存放或导出


Posted in Java/Android onJune 11, 2021

环境准备

其实也没什么准备,准备好Springboot就行,还有几张图片:

手把手教你用SpringBoot将文件打包成zip存放或导出

将文件打包成Zip存放

代码

Controller代码:

@RequestMapping("/zip")
@RestController
public class ZipController {

    /**
     * 将文件打包成zip并存放在特定位置
     */
    @PostMapping("package")
    public void packageFileToZip() throws IOException {
        // 为了方便我直接将文件地址写好了,各位可以根据自己的情况修改
        String[] filePath = new String[]{"E:\\ykds\\1068128498917799516.jpg", "E:\\ykds\\1068128498917917980.jpg", "E:\\ykds\\1068128498917807874.jpg"};
        // 将需要打包的文件都放在一个集合中
        List<File> fileList = new ArrayList<>();
        for (String s : filePath) {
            File file = new File(s);
            fileList.add(file);
        }
        // 先在D盘创建一个压缩包
        File zipFile = new File("D:\\package.zip");
        if(!zipFile.exists())
            zipFile.createNewFile();
        // 将package.zip的File对象传到toZip对象中
        ZipUtils.toZip(fileList, zipFile);
    }
}

ZipUTils工具类代码

public class ZipUtils {

    /**
     * 把文件集合打成zip压缩包
     * @param srcFiles 压缩文件集合
     * @param zipFile  zip文件名
     * @throws RuntimeException 异常
     */
    public static void toZip(List<File> srcFiles, File zipFile) throws IOException {
        if(zipFile == null){
            return;
        }
        if(!zipFile.getName().endsWith(".zip")){
            return;
        }
        ZipOutputStream zos = null;
        FileOutputStream out = new FileOutputStream(zipFile);
        try {
            zos = new ZipOutputStream(out);
            for (File srcFile : srcFiles) {
                byte[] buf = new byte[BUFFER_SIZE];
                zos.putNextEntry(new ZipEntry(srcFile.getName()));
                int len;
                // 读取文件并写入到zip中
                FileInputStream in = new FileInputStream(srcFile);
                while ((len = in.read(buf)) != -1) {
                    zos.write(buf, 0, len);
                    zos.flush();
                }
                in.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (zos != null) {
                zos.close();
            }
        }
    }
}

测试

代码打好了,接下来测试下,打开熟悉的postman:

手把手教你用SpringBoot将文件打包成zip存放或导出

调用接口后就会在D盘中新建一个package.zip的压缩包:

手把手教你用SpringBoot将文件打包成zip存放或导出

可以看到,我打包的文件都在这里,再看看能不能正常显示:

手把手教你用SpringBoot将文件打包成zip存放或导出

very good!

将文件打包成zip并导出

上面的方法只是将压缩包保存在本地,如果需要导出的话代码有点不一样。

代码

Controller代码:

/**
     * 将文件打包成zip并下载
     */
    @PostMapping("download")
    public void download(HttpServletResponse response) throws IOException {
        // 这里还是和上面一样
        String[] filePath = new String[]{"E:\\ykds\\1068128498917799516.jpg", "E:\\ykds\\1068128498917917980.jpg", "E:\\ykds\\1068128498917807874.jpg"};
        List<File> fileList = new ArrayList<>();
        for (String s : filePath) {
            File file = new File(s);
            fileList.add(file);
        }
        response.setHeader("content-type", "application/octet-stream");
        response.setContentType("application/octet-stream");
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=download.zip");
        ZipUtils.downloadZip(response.getOutputStream(), fileList);
    }

ZipUtils工具类代码

public static void downloadZip(OutputStream outputStream, List<File> fileList){
        BufferedInputStream bufferedInputStream = null;
        ZipOutputStream zipOutputStream = null;
        try {
            zipOutputStream = new ZipOutputStream(outputStream);
            for (File file : fileList) {
                ZipEntry zipEntry = new ZipEntry(file.getName());
                zipOutputStream.putNextEntry(zipEntry);
                byte[] buf = new byte[BUFFER_SIZE];
                int len;
                FileInputStream in = new FileInputStream(file);
                while ((len = in.read(buf)) != -1) {
                    zipOutputStream.write(buf, 0, len);
                    zipOutputStream.flush();
                }
            }
            zipOutputStream.flush();
            zipOutputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            try {
                if (bufferedInputStream != null) {
                    bufferedInputStream.close();
                }
                if (zipOutputStream != null ) {
                    zipOutputStream.close();
                }
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

测试

还是用postman:

手把手教你用SpringBoot将文件打包成zip存放或导出
手把手教你用SpringBoot将文件打包成zip存放或导出

下载完成后打开看看

手把手教你用SpringBoot将文件打包成zip存放或导出

到此这篇关于手把手教你用SpringBoot将文件打包成zip存放或导出的文章就介绍到这了,更多相关SpringBoot将文件打包成zip内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
总结一些Java常用的加密算法
Jun 11 Java/Android
Spring Cache和EhCache实现缓存管理方式
Jun 15 Java/Android
Springboot集成阿里云OSS上传文件系统教程
Jun 28 Java/Android
解决ObjectMapper.convertValue() 遇到的一些问题
Jun 30 Java/Android
Spring中bean的生命周期之getSingleton方法
Jun 30 Java/Android
Spring Cloud Gateway去掉url前缀
Jul 15 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
Java spring单点登录系统
Sep 04 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
OpenCV实现普通阈值
Nov 17 Java/Android
SpringBoot接入钉钉自定义机器人预警通知
Jul 15 Java/Android
Spring Boot实现文件上传下载
Aug 14 Java/Android
springboot @ConfigurationProperties和@PropertySource的区别
教你用Java Swing实现自助取款机系统
总结一些Java常用的加密算法
Jun 11 #Java/Android
为什么在foreach循环中JAVA集合不能添加或删除元素
Jun 11 #Java/Android
源码解读Spring-Integration执行过程
浅谈Java实现分布式事务的三种方案
分享一些Java的常用工具
You might like
安装APACHE
2007/01/15 PHP
php中adodbzip类实例
2014/12/08 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
2015/11/23 PHP
Js获取事件对象代码
2010/08/05 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
React 组件间的通信示例
2018/06/14 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
Python基础篇之初识Python必看攻略
2016/06/23 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
Python中的默认参数实例分析
2018/01/29 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
Python通过文本和图片生成词云图
2020/05/21 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
出生公证书
2015/01/23 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
退伍军人感言
2015/08/01 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis