2026/4/18 8:32:30
网站建设
项目流程
手机建站系统,优化网站排名需要多少钱,做生存分析的网站有哪些,云服务器搭建#x1f449; 这是一个或许对你有用的社群 #x1f431; 一对一交流/面试小册/简历优化/求职解惑#xff0c;欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料#xff1a; 《项目实战#xff08;视频#xff09;》#xff1a;从书中学#xff0c;往事…这是一个或许对你有用的社群 一对一交流/面试小册/简历优化/求职解惑欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料《项目实战视频》从书中学往事中“练”《互联网高频面试题》面朝简历学习春暖花开《架构 x 系统设计》摧枯拉朽掌控面试高频场景题《精进 Java 学习指南》系统学习互联网主流技术栈《必读 Java 源码专栏》知其然知其所以然这是一个或许对你有用的开源项目国产Star破10w的开源项目前端包括管理后台、微信小程序后端支持单体、微服务架构RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRM、AI大模型、IoT物联网等功能多模块https://gitee.com/zhijiantianya/ruoyi-vue-pro微服务https://gitee.com/zhijiantianya/yudao-cloud视频教程https://doc.iocoder.cn【国内首批】支持 JDK17/21SpringBoot3、JDK8/11Spring Boot2双版本来源blog.csdn.net/qq_21609191前言一、压缩包上传1、接口实现2、获取压缩包的文件名和文件路径二、压缩包解压并保存1、处理压缩包文件方法2、接口中实现处理压缩包三、总结前言之前一直用的zip4j来对压缩包进行操作但后来发现Hutool里面也有ZipUtilZipUtil是对java.util.zip做工具化封装操作起来大同小异改成了Hutool的ZipUtil这样就少引用了一个依赖。相关工具www.hutool.cn/docs/#/core/工具类/压缩工具-ZipUtil基于 Spring Boot MyBatis Plus Vue Element 实现的后台管理系统 用户小程序支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能项目地址https://github.com/YunaiV/ruoyi-vue-pro视频教程https://doc.iocoder.cn/video/一、压缩包上传1、接口实现在Class上加上RestController标注此类为控制器类PostMapping(“/upload”)标注此方法访问路径为/upload访问方法是POST这边接口接收的内容类型Content-Type 为 multipart/form-data这边接收时会自行根据参数进行判断RequestParam(“zipFile”)注解用来获取 zipFile 字段中对应的内容首先先实现一个用于上传文件的post接口代码如下RestController public class Controller { /** * 压缩包文件上传 * * param zipFile 压缩包文件 * return R 返回实体类 */ PostMapping(/upload) public R upload(RequestParam(zipFile) MultipartFile zipFile) { //TODO return R.success(); } }这边上传URL默认为http://127.0.0.1:8080/upload2、获取压缩包的文件名和文件路径这边使用Value注解获取配置文件application.yml的上传路径config.uploadPath的值在Class上别忘了加上Component注解进行组件扫描这样才能获取到配置文件中的上传路径uploadPath上传文件的接收参数类型为MultipartFile代码如下//组件扫描注解用于获取配置文件内容 Component RestController publicclass Controller { //获取配置文件中的文件上传物理路径例C:/ Value(${config.uploadPath}) private String uploadPath; /** * 压缩包文件上传 * * param zipFile 压缩包文件 * return R 返回实体类 */ PostMapping(/upload) public R multiFace(RequestParam(zipFile) MultipartFile zipFile) { //获取文件全名 String fileName zipFile.getOriginalFilename(); //解压目标文件夹对象压缩文件解压到此文件夹中 File extractFolder new File(uploadPath extract/); //压缩包存储目标文件对象 File destFile new File(uploadPath fileName); //文件上传路径对象 File fileDirectory new File(uploadPath); //当上传路径不存在时生成上传路径 if (!fileDirectory.exists()) { fileDirectory.mkdirs(); } //TODO return R.success(); } }基于 Spring Cloud Alibaba Gateway Nacos RocketMQ Vue Element 实现的后台管理系统 用户小程序支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能项目地址https://github.com/YunaiV/yudao-cloud视频教程https://doc.iocoder.cn/video/二、压缩包解压并保存1、处理压缩包文件方法解压缩步骤将上传的压缩包保存至文件夹解压文件夹中的压缩包到指定目录获取该目录中所有文件的文件数组对象代码如下/** * 处理压缩包文件 * * param zipFile 上传压缩包 * param destFile 指定压缩包路径 * param extractFolder 解压后文件夹 * return R 返回实体类 */ private R dealZip(MultipartFile zipFile, File destFile, File extractFolder) { //判断解压后文件夹是否存在 if (!extractFolder.exists()) { //不存在就创建 extractFolder.mkdirs(); } try { //步骤1、把上传的压缩包文件保存到指定压缩包路径 zipFile.transferTo(destFile); } catch (IOException e) { //运行报错直接返回错误信息 return R.failed(e.getMessage()); } //步骤2、调用Hutool的ZipUtil压缩工具类的unzip方法来进行对压缩包文件的解压解压到指定目录 ZipUtil.unzip(destFile, extractFolder); //解压缩完删除原文件可不删 destFile.delete(); //步骤3、获取解压后目录下所有的文件 File[] images extractFolder.listFiles(); //这边对获取到的文件数组进行判空校验 if (images null || images.length 0) { //不存在就把压缩文件夹删除可不删 extractFolder.delete(); return failed(上传失败压缩包为空); } //错误文件集合 ListString nameList new ArrayList(); //这边简单做个jpg图片校验单个文件全名中不包含jpg的文件添加到错误集合中 stream(images).forEach(image - { if (!image.getName().contains(jpg)) { nameList.add(image.getName()); } }); //错误集合存在数据就返回错误的文件名集合 if (nameList.size() 0) { //存在错误图片就把压缩文件夹删除可不删 extractFolder.delete(); return failed(压缩包文件错误错误文件如下 nameList 请修改后再上传); } //错误集合长度为0时返回解压后文件数组对象 return success(images); }2、接口中实现处理压缩包代码如下//组件扫描注解用于获取配置文件内容 Component RestController publicclass Controller { //获取配置文件中的文件上传物理路径例C:/ Value(${config.uploadPath}) private String uploadPath; //Service层 Resource private Service service; /** * 压缩包文件上传 * * param zipFile 压缩包文件 * return R 返回实体类 */ PostMapping(/upload) public R multiFace(RequestParam(zipFile) MultipartFile zipFile) { //获取文件全名 String fileName zipFile.getOriginalFilename(); //解压目标文件夹对象压缩文件解压到此文件夹中 File extractFolder new File(uploadPath extract/); //压缩包存储目标文件对象 File destFile new File(uploadPath fileName); //文件上传路径对象 File fileDirectory new File(uploadPath); //当上传路径不存在时生成上传路径 if (!fileDirectory.exists()) { fileDirectory.mkdirs(); } //调用上面【处理压缩包文件方法】得到返回结果 R zipResult dealZip(zipFile, destFile, extractFolder); //失败就返回错误信息 if (FAIL_CODE zipResult.getCode()) { return zipResult; } //获取【处理压缩包文件方法】中返回的图片文件数组对象 File[] images (File[]) zipResult.getData(); //实体类集合 ListEntity entities new ArrayList(); //这边使用stream对图片文件数组对象进行遍历 stream(images).forEach(image - { //TODO 这边可以做其他的处理 //这边简单的获取了照片名字的前缀作为id String id image.getName().split(\\.)[0]; //通过数据库找找此id的信息 Entity entity service.getById(id); if (entity ! null) { //存在此条信息就把此图片拷贝到上传目录中这边用到Hutool的FileUtil文件工具类的copy文件拷贝方法 FileUtil.copy(image, new File(uploadPath image.getName()), true); //存在就添加进实体类集合 entities.add(entity); } }); //实体类为空代表在数据库中没有找到对应id的信息 if (entities.size() 0) { //删除解压缩目录可不删 extractFolder.delete(); return failed(压缩包内图片无匹配信息); } //删除解压缩目录可不删 extractFolder.delete(); //最后数据库根据id更新所有集合实体类的信息 return service.updateBatchById(entities) ? success(压缩包上传成功) : failed(压缩包上传失败); } }三、总结这边项目主要应用是上传人脸的照片压缩包解压缩后根据照片的名称前缀为人员id来进行保存压缩包遍历中可以按照业务需求进行文件区分再进行其他操作。这些年程序员生涯发现网上一些解决方案很少有完整的都是零零散散的查起来特别费劲所以自己写解决方案会尽量要求写完整方便自己也方便别人。欢迎加入我的知识星球全面提升技术能力。 加入方式“长按”或“扫描”下方二维码噢星球的内容包括项目实战、面试招聘、源码解析、学习路线。文章有帮助的话在看转发吧。 谢谢支持哟 (*^__^*