手把手教你用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中重写父类方法加不加@Override详解
Jun 21 Java/Android
HashMap实现保存两个key相同的数据
Jun 30 Java/Android
看完这篇文章获得一些java if优化技巧
Jul 15 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
JavaCV实现照片马赛克效果
Jan 22 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
Android Flutter实现图片滑动切换效果
Apr 07 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
Android studio 简单计算器的编写
May 20 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 Java/Android
SpringBoot详解执行过程
Jul 15 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
PHP 编写的 25个游戏脚本
2009/05/11 PHP
PHP数组实例总结与说明
2011/08/23 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
简单的网页广告特效实例
2017/08/19 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
python实现中文输出的两种方法
2015/05/09 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
分析Python中解析构建数据知识
2018/01/20 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
DJI全球:DJI Global
2021/03/15 全球购物
仓库理货员岗位职责
2013/12/18 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
给校长的建议书100字
2014/05/16 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
给朋友的赠语
2015/06/23 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
Python sklearn分类决策树方法详解
2022/09/23 Python