码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 56:第五章:开发admin管理服务:9:开发【文件上传到,MongoDB的GridFS中,接口】;(把文件上传到GridFS的SOP)


    说明:

    (1)本篇博客内容:开发【文件上传到,MongoDB的GridFS中,接口】;

    目录

    一:GridFS Buckets,简介; 

    二:在【model】模型工程中,引入MongoDB依赖;

    三:在【files】文件服务的application.yml配置文件中,配置MongoDB;

    四:在【files】文件服务中,创建一个配置类GridFSConfig类;(该类的主要作用是:实例化一个MongoDB的GridFSBucket对象,进IoC容器)

    五:正式开发;

    1.在【api】接口工程的FileUploaderControllerApi接口中,定义【文件上传到,MongoDB的GridFS中】接口;(具体在这儿,这个接口的作用就是【把人脸数据,上传到MongoDB的GridFS中】,也就是人脸入库)

    2.在【files】文件服务的FileUploaderController类中,去实现【文件上传到,MongoDB的GridFS中】接口;

    六:测试;

    七:【文件上传到,MongoDB的GridFS中,接口】需要管理员登录,才能操作;(在InterceptorConfig中,把"AdminTokenInterceptor"拦截器,也作用到该接口上)


    一:GridFS Buckets,简介; 

    (1)在【45:第四章:开发文件服务:6:第三方云存储解决方案【阿里云OSS】;】中,介绍阿里OSS的时候,也有BUcket的概念;

    (2)其实,很多文件存储系统,文件都是放在Bucket中的;

    (3)我们这儿,也需要在项目中整合GridFS的Buckets;


    二:在【model】模型工程中,引入MongoDB依赖;

    1. <dependency>
    2. <groupId>org.mongodbgroupId>
    3. <artifactId>mongodb-driverartifactId>
    4. dependency>

    三:在【files】文件服务的application.yml配置文件中,配置MongoDB;

    1. #配置MongoDB
    2. data:
    3. mongodb:
    4. uri: mongodb://root:root@192.168.***.***:27017 #MongoDB所部署服务的ip地址、端口号;
    5. database: imooc-news #我们需要在MongoDB中,创建imooc-news这个database;

    说明:

    (1) 内容说明;


    四:在【files】文件服务中,创建一个配置类GridFSConfig类;(该类的主要作用是:实例化一个MongoDB的GridFSBucket对象,进IoC容器)

    1. package com.imooc.files;
    2. import com.mongodb.MongoClient;
    3. import com.mongodb.client.MongoDatabase;
    4. import com.mongodb.client.gridfs.GridFSBucket;
    5. import com.mongodb.client.gridfs.GridFSBuckets;
    6. import org.springframework.beans.factory.annotation.Value;
    7. import org.springframework.context.annotation.Bean;
    8. import org.springframework.context.annotation.Configuration;
    9. import org.springframework.stereotype.Component;
    10. @Configuration
    11. public class GridFSConfig {
    12. @Value("${spring.data.mongodb.database}")
    13. private String mongodb;
    14. /**
    15. * 向IoC容器中,实例化一个GridFSBucket对象;
    16. * @param mongoClient
    17. * @return
    18. */
    19. @Bean
    20. public GridFSBucket gridFSBucket(MongoClient mongoClient) {
    21. //通过MongoClient,获得MongoDatabase;参数是,MongoDB中的某个database;
    22. MongoDatabase mongoDatabase = mongoClient.getDatabase(mongodb);
    23. //通过获得MongoDatabase,获得GridFSBucket;
    24. GridFSBucket gridFSBucket = GridFSBuckets.create(mongoDatabase);
    25. //返回获得的GridFSBucket;也就是把这个GridFSBucket实例化进IoC容器;
    26. return gridFSBucket;
    27. }
    28. }

    说明:

    (1)利用@Value从application.yml这个官方配置文件中,获取定义的属性值;(有关这个点,可以参考【28:第三章:开发通行证服务:11:在配置文件中定义属性,然后在代码中去获取;】)

    (2)这样一来,我们在其他地方就可以直接从IoC容器中,获取GridFSBucket对象对象了;


    五:正式开发;

    1.在【api】接口工程的FileUploaderControllerApi接口中,定义【文件上传到,MongoDB的GridFS中】接口;(具体在这儿,这个接口的作用就是【把人脸数据,上传到MongoDB的GridFS中】,也就是人脸入库)

    1. /**
    2. * 【文件上传到MongoDB的GridFS】
    3. * (1)和【AdminMngControllerApi中的,新增admin账号,接口】一样;我们还是使用NewAdminBO来承接
    4. * 前端传过来的参数;然后,具体的人脸数据会存在NewAdminBO的img64属性中;(PS:后端之所以可以这么干,前端肯定做了对应的设置的)
    5. * (2)这个接口,我们是不能够通过Swagger进行调用的?所以,Swagger的@ApiOperation()我们就不设置了;
    6. * (3)其实,不仅人脸数据可以上传到GridFS,一些其他文件,只要需要我们也可以上传到GridFS;
    7. * @param newAdminBO
    8. * @return
    9. * @throws Exception
    10. */
    11. @PostMapping("/uploadToGridFS") //设置路由,这个是需要前后端约定好的;
    12. public GraceJSONResult uploadToGridFS(@RequestBody NewAdminBO newAdminBO) throws Exception;

    说明:

    (1)这个接口的url、请求方式、参数类型,不是瞎写的,是需要和前端保持一致的;

    (2)在向GridFS上传文件时,我们会使用在【51:第五章:开发admin管理服务:4:开发【新增admin账号,接口】;】中,创建的NewAdminBO实体类,来承接数据;

    (3)合理性说明:

    (4)能够看到,前端做了很多工作;

    2.在【files】文件服务的FileUploaderController类中,去实现【文件上传到,MongoDB的GridFS中】接口;

    1. /**
    2. * 【文件上传到,MongoDB的GridFS中】
    3. * @param newAdminBO
    4. * @return
    5. * @throws Exception
    6. */
    7. @Override
    8. public GraceJSONResult uploadToGridFS(NewAdminBO newAdminBO) throws Exception {
    9. // 1.1 获得img64属性值,这个值其实就是文件(人脸图片文件)的Base64编码后的字符串;
    10. String file64 = newAdminBO.getImg64();
    11. // 1.2 把base64格式的字符串,转换成byte数组;
    12. byte[] bytes = new BASE64Decoder().decodeBuffer(file64.trim());
    13. // 1.3 把byte数组,转成InputStream输入流;
    14. ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
    15. /**
    16. * 2. 把文件上传到MongoDB的GridFS中;
    17. * 第一个参数:上传后的文件名;我们这儿使用【管理员用户名.png】的名字;因为管理员用户名不能重复,所以这种命名方式是OK的;
    18. * 第二个参数:文件的InputStream输入流;
    19. * 返回值:其返回值类型是ObjectId(org.bson.types);
    20. */
    21. ObjectId fileId = gridFSBucket.uploadFromStream(newAdminBO.getAdminName() + ".png", byteArrayInputStream);
    22. // 3. 获得文件在GridFS中的主键id;
    23. String fileIdStr = fileId.toString();
    24. // 4. 把文件上传到GridFS中后的id,回传给前端;
    25. return GraceJSONResult.ok(fileIdStr);
    26. }

    说明:

    (1) 看注释吧;


    六:测试;

    (1)install一下整个项目;(2)然后,启动【admin】管理服务和【files】文件服务;(3)记得启动前端,使用SwitchHost开启虚拟域名;

    然后,其逻辑为:

    (1)step1;

    (2)step2;


    七:【文件上传到,MongoDB的GridFS中,接口】需要管理员登录,才能操作;(在InterceptorConfig中,把"AdminTokenInterceptor"拦截器,也作用到该接口上)

  • 相关阅读:
    Java关于普通查找和二分查找
    MySQL join原理及优化
    [七夕节]——一款基于canvas绘制五颜六色线条合成一个爱心发光动画特效
    python3 flask 实现对config.yaml文件的内容的增删改查,并重启服务
    Compositional Minimax Optimization学习之路
    5.3 端口扫描:Zenmap工具的应用
    java计算机毕业设计ssm气象百事通系统-天气预报系统
    PHP session反序列化学习
    CopyOnWrite 容器
    Mac配置host
  • 原文地址:https://blog.csdn.net/csucsgoat/article/details/126026542
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号