手把手教你用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输出Hello World完美过程解析
Jun 13 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
JVM之方法返回地址详解
Feb 28 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
Java设计模式中的命令模式
Apr 28 Java/Android
Jmerte 分布式压测及分布式压测配置
Apr 30 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
Android Studio实现简易进制转换计算器
May 20 Java/Android
Java时间工具类Date的常用处理方法
May 25 Java/Android
Qt数据库应用之实现图片转pdf
Jun 01 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
Smarty安装配置方法
2008/04/10 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
python实现音乐下载器
2018/04/15 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
Python 编程速成(推荐)
2019/04/15 Python
Django logging配置及使用详解
2019/07/23 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
荷兰电脑专场:Paradigit
2018/05/05 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
大学学习个人的自我评价
2014/02/18 职场文书
企业后勤岗位职责
2014/02/28 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
接待员岗位职责范本
2015/04/15 职场文书
任命书格式模板
2015/09/22 职场文书
Python加密技术之RSA加密解密的实现
2022/04/08 Python
React自定义hook的方法
2022/06/25 Javascript
python数字图像处理之图像的批量处理
2022/06/28 Python