news 2026/5/2 15:34:44

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 21:50:48

社会网络仿真软件:UCINET_(4).数据准备与导入

数据准备与导入 在进行社会网络分析之前,首要步骤是准备好数据并将其导入到UCINET中。数据准备涉及数据的收集、清洗和格式化,而数据导入则是将准备好的数据加载到UCINET中以便进行进一步的分析。本节将详细介绍这两个步骤,并提供具体的例子…

作者头像 李华
网站建设 2026/5/1 15:06:34

Flutter for OpenHarmony 实战:投票管理系统完整开发指南

Flutter for OpenHarmony 实战:投票管理系统完整开发指南 文章目录 Flutter for OpenHarmony 实战:投票管理系统完整开发指南摘要一、项目背景与功能概述1.1 投票系统的应用场景1.2 应用功能规划1.3 投票规则说明 二、投票系统设计原则2.1 用户界面设计2…

作者头像 李华
网站建设 2026/4/24 0:34:13

终于有人愿意把 SPC 精益本质讲透了

搞生产,做质量,SPC 这三个字听得耳朵起茧。报表没少做,图没少画,真到出了问题,该乱的还是乱。问题出在哪?很多人把 SPC 当数学题,当上级任务,偏偏忘了它最该是什么——一套让过程自己…

作者头像 李华
网站建设 2026/4/30 23:34:55

eScan杀毒软件更新服务器遭入侵传播多阶段恶意软件

印度网络安全公司MicroWorld Technologies开发的eScan杀毒软件更新基础设施遭到未知攻击者入侵,向企业和消费者系统传播持久化下载器恶意软件。Morphisec公司研究员Michael Gorelik表示:"恶意更新通过eScan的合法更新基础设施进行分发,导…

作者头像 李华
网站建设 2026/4/30 13:31:08

大数据领域Kappa架构的分布式计算特性

大数据领域Kappa架构的分布式计算特性:用"流水生产线"思维破解实时与离线的双重难题 关键词:Kappa架构、分布式计算、流处理、事件日志、容错性、水平扩展、一致性 摘要:传统大数据架构中,实时与离线处理的"双系统困境"一直是工程师的噩梦。2014年提出…

作者头像 李华
网站建设 2026/4/30 17:41:30

大模型时代,我这样学习AI技能,不仅没被取代,工资还涨了

01 大模型技术,职业升级的时代引擎 大模型技术的爆发正在重塑就业市场。根据行业观察,大量公司急需懂大模型的工程师,这类岗位的薪资普遍高于传统开发岗。 更为重要的是,如今入行大模型应用开发的门槛已大幅降低。借助开源社区和…

作者头像 李华