当前位置: 首页 > news >正文

BASE64格式图片储存到本地磁盘

使用高拍仪拍照,生成的图片是base64格式的图片,储存到数据库的时候占用的内存太大,所以将base64格式储存到本地。
下面代码使用的是储存到本地的D:\upload\images\2026\2\2 这个是开发环境,如果是放到服务器的话,将D:\upload替换成服务器的磁盘中;
下面的是代码:

package org.jeecg.modules.business.utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.time.LocalDateTime; import java.util.Base64; /** * 将Base64格式图片保存到本地磁盘的工具类 */ @Slf4j @Component public class Base64ImageSaver { // 目标存储目录 D:/upload @Value(value = "${jeecg.path.upload}") private String uploadPath; /** * 将Base64图片保存到本地 * * @param base64Image Base64格式的图片字符串(可带前缀) * @param type 传过来的照片类型 * @return 保存成功返回文件完整路径,失败返回null */ public String saveBase64ImageToLocal(String base64Image, Integer type) { // 1. 校验入参 if (base64Image == null || base64Image.isEmpty() || type == null ) { log.error("Base64字符串或文件名不能为空"); return null; } String newFileName = ""; if (type == 999){ newFileName = "办理人照片_"+System.currentTimeMillis(); }else{ newFileName = "_"+System.currentTimeMillis(); } // 2. 拼接日期目录路径(优化路径拼接,避免手动拼接斜杠) LocalDateTime nowDateTime = LocalDateTime.now(); String datePath = String.format("images/%d/%d/%d", nowDateTime.getYear(), nowDateTime.getMonthValue(), nowDateTime.getDayOfMonth()); // 完整的目录路径 File dirFile = new File(uploadPath, datePath); // 创建目录(递归创建,无需判断是否存在,mkdirs()已处理) if (!dirFile.exists()) { boolean mkdirSuccess = dirFile.mkdirs(); if (!mkdirSuccess) { log.error("创建目录失败:{}", dirFile.getAbsolutePath()); return null; } } // 3. 处理Base64前缀,提取纯编码数据 String pureBase64Data = base64Image; if (base64Image.contains(";base64,")) { pureBase64Data = base64Image.split(";base64,")[1]; } // 4. 拼接完整的文件路径(目录+文件名) File targetFile = new File(dirFile, newFileName+".png"); // 5. 解码并写入文件 try (FileOutputStream outputStream = new FileOutputStream(targetFile)) { // 解码Base64为字节数组 byte[] imageBytes = Base64.getDecoder().decode(pureBase64Data); // 写入文件 outputStream.write(imageBytes); outputStream.flush(); String filePath = targetFile.getAbsolutePath(); log.info("图片保存成功:{}", filePath); String result = filePath.replaceFirst("^.*upload\\\\", "").replace("\\", "/"); return result; } catch (IllegalArgumentException e) { log.error("Base64解码失败:{}", e.getMessage()); return null; } catch (IOException e) { log.error("文件写入失败:{},路径:{}", e.getMessage(), targetFile.getAbsolutePath()); return null; } } }
http://www.jsqmd.com/news/334815/

相关文章:

  • 解锁免疫潜能:B 细胞活化的 “黄金密钥”
  • AI原生应用领域多租户技术的创新实践
  • 社会网络仿真软件:UCINET_(8).结构洞与社会资本分析
  • React Native for OpenHarmony:构建高性能、高体验的 TextInput 输入表单
  • 社会网络仿真软件:UCINET_(9).结构洞与社会资本
  • 永辉超市卡回收方法、流程与折扣全解析 - 京顺回收
  • 社会网络仿真软件:UCINET_(7).网络聚类与社区检测
  • 洛谷 P3503 [POI 2010] KLO-Blocks 题解
  • 社会网络仿真软件:UCINET_(6).中心性与权力分析
  • 多语言 SEO 破局:从零搭建跨语言主题权威性,抢占全球流量
  • 社会网络仿真软件:UCINET_(6).基本网络度量指标
  • 实时渲染 + AI算法:直播美颜SDK中智能美妆的技术架构拆解
  • 基于深度学习的衣物分类识别 AI图像识别技术在衣物分类 短袖衬衫识别 图像数据集
  • 2026武汉临空改善型住宅及商铺推荐榜低密现房优享 - 资讯焦点
  • 高性能直播美颜sdk开发方案:智能美妆算法如何兼顾效果与性能?
  • 日程
  • 财务发票报销审核严?AI自动查合规性,不合规一键退回
  • 销售客户需求记不住?RPA自动存需求,后续推荐更精准
  • 社会网络仿真软件:UCINET_(4).数据准备与导入
  • 宏智树 AI:问卷设计还在 “凭经验凑题”?AI 让 “无效调研” 变 “数据金矿”!
  • 宏智树 AI 封神!学术 PPT 不用熬:开题 / 答辩 / 汇报 30 分钟速成
  • 社会网络仿真软件:UCINET_(5).网络可视化技术
  • 宏智树 AI 太懂论文党!零代码搞定数据分析,小白也能写硬核实证
  • 宏智树 AI:课程论文不用 “凑字数”,新手也能写出 “导师夸爆” 的学术感
  • 用 eBPF 给 PF_PACKET 套接字做“多路分发”(C/C++代码实现)
  • 计算机SSM毕设实战-基于ssm的生产设备信息管理系统的设计与实现设备档案管理、维修记录管理【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 社会网络仿真软件:UCINET_(3).UCINET安装与配置
  • 宏智树 AI:破解论文 “查重红 + AI 痕” 双重困境,学术优化原来这么简单!
  • SSM毕设项目:基于ssm的高校学生宿舍线上管理系统(源码+文档,讲解、调试运行,定制等)
  • Flutter for OpenHarmony 实战:投票管理系统完整开发指南