news 2026/6/15 20:13:56

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/6/15 13:20:32

ESP32-S3对接豆包制作AI桌面数字收音机,桌面闹钟,桌面新闻播报器

ESP32-S3对接豆包制作AI桌面数字收音机,桌面闹钟,桌面新闻播报器 基于ESP32-S3开发板,对接豆包的AI能力,制作一款集数字收音机、桌面闹钟、新闻播报功能于一体的AI桌面设备,核心是实现ESP32-S3与豆包的网络交互&#x…

作者头像 李华
网站建设 2026/6/15 14:15:02

社会网络仿真软件:UCINET_(3).UCINET数据导入与导出

UCINET数据导入与导出 在社会网络分析中,数据的导入和导出是至关重要的步骤。UCINET提供了多种方法来处理数据,使其能够与其他软件和工具进行交互。本节将详细介绍UCINET中数据导入和导出的原理和方法,包括常见的数据格式、导入导出的操作步…

作者头像 李华
网站建设 2026/6/14 19:52:49

社会网络仿真软件:UCINET_(7).网络聚类与社区检测

网络聚类与社区检测 在网络分析中,聚类和社区检测是两个非常重要的概念。聚类通常指的是将网络中的节点根据它们之间的连接关系分成不同的组,而社区检测则更进一步,旨在识别网络中具有高内部连接和低外部连接的子网络。这些技术在社会网络分…

作者头像 李华
网站建设 2026/6/15 13:39:42

中国超大规模云服务商豪赌智能体AI,电商成为新战场

人工智能行业正在向智能体AI转型——这类系统能够自主执行多步骤任务,这一转变在近几个月主导了技术讨论。但是,当西方公司专注于基础模型和跨平台互操作性时,中国的科技巨头正在竞相通过电商整合来占领市场,这种战略分化可能会重…

作者头像 李华