人脸图像入库

spring boot 整合mogodb

步骤:

很简单 分三部

  1. 导包
  2. 在application.yml 中配置mongodb的连接信息
  3. 编写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

步骤三

编写配置类
主体思路:

  1. 用MongoClient 根据数据库名称获得数据库对象
  2. 根据数据库对象创建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);
    }
}

图片入库

业务逻辑:

  1. 首先判断base64字符串是否存在
  2. 将base64字符串转成InputStream对象
  3. 因为一个用户只需要使用一张面部图片 不需要多张 又因为用户名也是唯一的 直接使用用户名做为文件名即可 文件类型为png
  4. 将文件的主键返回给用户

因为 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());
    }

人脸图像入库

上一篇:为什么JS动态生成的input标签在后台有时候没法获取到


下一篇:性能测试——jmeter性能测试——压力测试时两种设置方式