在线问题反馈模块实战(二十):实现文件批量导出到zip压缩包中功能
👨🎓作者:bug菌
✏️博客: 、 、 、 等
🎉简介:CSDN/阿里云/华为云/51CTO 博客专家,博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w+,硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费领取简历模板/学习资料/大厂面试真题/职业规划等海量资料。
..
✍️温馨提醒:本文字数:1999字, 阅读完需:约 6 分钟
嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更
系列文章吧。希望能帮助更多的初学者们快速入门!如果小伙伴们在批阅文章的过程中觉得文章对自己有帮助,请别吝啬手中的赞呀,大胆的把文章点亮👍,相信你点赞了好的文章,平台也会经常给你推荐高质量好文,您的点赞三连(收藏+关注+留言)就是对bug菌写文道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
一、前言🔥
接下来的这几期,bug菌想跟大家分享一下自己昨天刚接到一个临时的需求,热乎着呢,想分享一下自己是如何面对临时需求并制定整个开发周期,其中包括从梳理业务到创建业务表再到实现业务逻辑形成闭环再到与前端对接,其中会穿插一些业务拓展及功能性拓展,这一条龙流程在线与大家一起见证,分享给刚入门的小伙伴,希望对你们有所帮助。
环境说明:idea2019.3 + springboot2.3.1.REALSE + mybati-plus3.2.0 + mysql5.6 + jdk1.8
若小伙伴们在批阅文章的过程中觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
二、需求描述🔥
此需求完全是针对管理员个人而开放的,需求方要求能将所有人的反馈文件导出到一个指定的文件夹中,并且最好是能导出一个.zip的压缩包,这样就方便它挨个挨个浏览查阅,也方便运维人员针对文件进行备份存档。
我一听,这其实也是io操作的一种,虽然不是很常用,但是基本想实现该需求,也是简单的为此,我还是基于文件流的写法来逐一实现如何将批量实现文件的zip压缩,如果你也遇到的了这个需求并且没有啥思路,不用担心,你接下来只需要根据我写的实现逻辑,即可轻松带你解决你的需求问题,如果你是想接触了解,我写的也是非常详细,实现及测试,就地解决你的一切阅读所带来的不便。
接下来,废话不多说,直接上代码。
三、代码实现🔥
1️⃣定义Controller请求
首先我们先定义个接口请求,子路径名顾名思义,就是最好定义为能够见名知意的接口路径名,比如我这该需求是直接将图片导出,那我直接定义为export-questions-images即可。
2️⃣定义接口方法solveQuestion()
3️⃣实现exportQuestions()方法
如下是核心实现方法,具体实现思路就是,进行了两次文件压缩,具体操作就是:先是对完整的个人文件夹进行分类,然后将对于子文件的文件添加进子文件夹中,然后遍历对每一个子文件夹进行压缩,然后再将所有的压缩包存放到一个父文件夹中,接着对父文件夹进行压缩,最后将父压缩包导出即可。
涉及所有代码,若是有不清楚的地方,麻烦多研究几遍,我相信,你一定能学的明白的。
4️⃣实现getQuestions()方法
如下是确定数据来源,将图片地址不为空的数据查询出来。
5️⃣实现文件写入压缩包方法fileToZip()
如下是实现单个文件被压缩成zip的功能方法。
6️⃣定义全局路径配置
yaml文件配置:
获取方式:
7️⃣涉及存放地址展示
如下是我直接存放在项目根目录下的template文件夹下。
大概你们可以参考一下,观摩我的代码然后对照该目录结构,这样你们方便理解。
四、测试🔥
接下来,我们就对该接口进行测试,由于我是将该接口加入了token白名单,所以我们就不需要通过设置接口请求头了。我们只需要在浏览器输入完整访问地址即可,
比如如下演示:
输入地址后,我们直接浏览器回车,我们可以看看到浏览器左下角会弹出一个xxx.zip的压缩包下载,这就证明我们起码成功了一半。
接下来,我们再检查一下,具体的文件夹子个数及子文件夹具体images数量,核实一下是否与数据库数据一致?经我查验,都是完整导出完好无损的。
正常给大家看下我后台查询数据所存储数据库的原本记录格式吧。也方便大家核对子文件压缩包数量是否一致。
具体给大家看一眼,对于admin该条记录而言,该用户是共上传了两个截图,所以在我们的导出包中对于admin.zip目录里应该就是对于的这两xxx.jpg图片才是,我给大家打开核实一下。
大家请看:
最后看下控制台,是否有导出异常信息?很正常,除了查询接口sql打印无其他打印内容,证明代码导出不存在显性问题,大家可以正常拿去使用借鉴啦。
... ...
好啦,以上就是这期的所有内容啦,你们学废了么?如果对你有所帮助,还请不要忘记给bug菌[三连支持]哟。如果想获得更多的学习资源或者想和更多的技术爱好者一起交流,可以关注我的公众号『 』,后台回复关键词领取学习资料、大厂面经、面试模板等海量资源,就等你来拿。
五、往期热文推荐🔥
对于问题反馈模块实战开发,我完整的梳理了每一期的教学及链接地址,仅供参考:希望能对你们有所帮助。
如上是整整二十期内容,每一期都是干货,对于一个模块的开发,如何一点一滴打造并测试部署上线,我再说一遍,这不是演习,是实战!是实战!是实战!
若你们觉得只是需要了解其中某个知识点或者业务的话,也不反对,你就选择其中的几期进行学习就好,反正都已经完结啦;我只希望你们能有所收获,有所成长,也就不枉我苦心每天下班后给大家总结更新。
六、文末🔥
如果还想要学习更多,小伙伴们直接订阅bug菌专门为大家创建的零基础入门Spring Boot专栏 ,从无到有,从零到一!以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
- 点赞
- 收藏
- 关注作者
评论(0)