人脸图像入库
spring boot 整合mogodb
步骤:
很简单 分三部
- 导包
- 在application.yml 中配置mongodb的连接信息
- 编写GridFSBucket bean GridFSBucket用于操作文件
步骤一
查看官方文档 按官方文档导入包即可 https://docs.mongodb.com/drivers/java/sync/v4.3/quick-start/
遇到的错误
启动自动抛出 java.lang.ClassNotFoundException: com.mongodb.connection.BufferProvider
错误原因: 导入的包不对 一定要根据官方文档导包 视频教程有误
步骤二
编写配置配置文件
uri格式mongodb://username:password@ip:port
没有什么好说的 类似mysql 配置uri和数据库即可
data:
mongodb:
uri: mongodb://lyra:365373011@127.0.0.1:27017
database: news
步骤三
编写配置类
主体思路:
- 用MongoClient 根据数据库名称获得数据库对象
- 根据数据库对象创建
GridFSBucket
对象
遇到的错误
使用@value注入字符串时未加$符号 未注入成功
@Configuration
public class GridFSConfig {
@Value("${spring.data.mongodb.database}")
private String databaseName;
@Bean
public GridFSBucket gridFSBucket(MongoClient mongoClient) {
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
return GridFSBuckets.create(mongoDatabase);
}
}
图片入库
业务逻辑:
- 首先判断base64字符串是否存在
- 将base64字符串转成InputStream对象
- 因为一个用户只需要使用一张面部图片 不需要多张 又因为用户名也是唯一的 直接使用用户名做为文件名即可 文件类型为png
- 将文件的主键返回给用户
因为 JDK从1.8升级到9.0.1后sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用 所以得使用Base64.Decoder decoder = Base64.getDecoder();
获取解码对象
然后根据byte数组进行构建inputStream对象
if (adminBO.getImg64() == null) {
GraceException.display(ResponseStatusEnum.UPLOAD_IMAGE_BASE64_ISNULL);
}
Base64.Decoder decoder = Base64.getDecoder();
byte[] imageBytes = decoder.decode(adminBO.getImg64());
InputStream inputStream = new ByteArrayInputStream(imageBytes);
根据inputSteam和用户名进行上传文件操作
ObjectId objectId = gridFSBucket.uploadFromStream(adminBO.getUsername() + ".png", inputStream);
最后返回没什么好说的
@Override
public GraceJSONResult uploadToGridFS(AdminBO adminBO) {
if (adminBO.getImg64() == null) {
GraceException.display(ResponseStatusEnum.UPLOAD_IMAGE_BASE64_ISNULL);
}
Base64.Decoder decoder = Base64.getDecoder();
byte[] imageBytes = decoder.decode(adminBO.getImg64());
InputStream inputStream = new ByteArrayInputStream(imageBytes);
ObjectId objectId = gridFSBucket.uploadFromStream(adminBO.getUsername() + ".png", inputStream);
return GraceJSONResult.ok(objectId.toString());
}
虽然道路是曲折的,但前途是光明的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律