手把手教你用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 相关文章推荐
详解Spring Boot使用系统参数表提升系统的灵活性
Jun 30 Java/Android
Java生成读取条形码和二维码的简单示例
Jul 09 Java/Android
SpringRetry重试框架的具体使用
Jul 25 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
Sep 25 Java/Android
Spring Cloud 中@FeignClient注解中的contextId属性详解
Sep 25 Java/Android
关于maven依赖 ${xxx.version}报错问题
Jan 18 Java/Android
SpringBoot+Redis实现布隆过滤器的示例代码
Mar 17 Java/Android
Spring事务管理下synchronized锁失效问题的解决方法
Mar 31 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
Spring Boot配合PageHelper优化大表查询数据分页
Apr 20 Java/Android
多线程Spring通过@Scheduled实现定时任务
May 25 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实现文件上传二法
2006/10/09 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
Prototype框架详解
2015/11/25 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
js实现打字小游戏
2019/12/17 Javascript
python中元类用法实例
2014/10/10 Python
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
个人简历自我评价
2014/01/06 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
物业保安员岗位职责
2014/03/14 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
组织鉴定材料
2014/06/02 职场文书
欢迎新生标语
2014/10/06 职场文书
创业计划书之餐饮
2019/09/02 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript
Java实现带图形界面的聊天程序
2022/06/10 Java/Android