本节,我们将介绍如何基于MongoDB技术来存储二进制文件,从而实现一个文件服务器MongoDB File Server。
本文件服务器致力于小型文件的存储,比如博客中的图片、普通文档等。由于MongoDB支持多种数据格式的存储,对于二进制的存储自然也是不在话下,所以可以很方便地用于存储文件。由于MongoDB的BSON文档对于数据量大小的限制(每个文档不超过16MB),所以本文件服务器主要针对的是小型文件的存储。对于大型文件的存储(比如超过16MB),MongoDB官方已经提供了成熟的产品GridFS,读者朋友可以自行了解。
文件服务器应能够提供与平台无关的REST API供外部系统调用。
文件服务器整体的API设计如下。
·GET/files/{pageIndex}/{pageSize}:分页查询已经上传了的文件。
·GET/files/{id}:下载某个文件。
·GET/view/{id}:在线预览某个文件。比如,显示图片。
·POST/upload:上传文件。
·DELETE/{id}:删除文件。
我们创建一个新项目,称之为mongodb-file-server。
本例子采用的开发技术如下。
·MongoDB 3.4.6。·Spring Boot 2.0.0.M2。
·Spring Data Mongodb 2.0.0.M4。
·Thymeleaf 3.0.6.RELEASE。
·Thymeleaf Layout Dialect 2.2.2。
·Embedded MongoDB 2.0.0。
其中,Spring Boot用于快速构建一个可独立运行的Java项目;
Thymeleaf作为前端页面模板,方便展示数据;Embedded MongoDB则是一款由Organization Flapdoodle OSS出品的内嵌MongoDB,可以在不启动MongoDB服务器的前提下,方便进行相关的MongoDB接口测试。
本文所演示的项目,是采用Gradle进行组织以及构建的,如果对Gradle不熟悉,也可以自行将项目转为Maven项目。
build.gradle文件完整配置内容如下。
该build.gradle文件中的各配置项的注释已经非常详尽了,这里就不再赘述其配置项的含义了。
在mongodb-file-server项目基础上,我们将实现文件服务器的功能。
1.领域对象
首先,我们要对文件服务器进行建模。相关的领域模型如下。
文档类是类似与JPA中的实体的概念。不同的是JPA是采用@Entity注解,而文档类是采用@Document注解。
在com.waylau.spring.boot.fileserver.domain包下,我们创建了一个File类。
需要注意以下两点。
·文档类,主要采用的是Spring Data MongoDB中的注解,用于标识这是NoSQL中的文档概念。
·文件的内容,我们是用org.bson.types.Binary类型来进行存储。
2.存储库FileRepository
存储库用于提供与数据库“打交道”的常用的数据访问接口。其中FileRepository接口继承自org.springframework.data.mongodb.repository.MongoRepository即可,无须自行实现该接口的功能,Spring Data MongoDB会自动实现接口中的方法。
3.服务接口及实现类
FileService接口定义了对于文件的CURD操作,其中查询文件接口是采用的分页处理,以有效提升查询性能。
4.控制层、API资源层
FileController控制器作为API的提供者,接收用户的请求及响应。
API的定义符合RESTful的风格。
其中@CrossOrigin(origins=”*”,maxAge=3600)注解标识了API可以被跨域请求。
有多种方式可以运行Gradle的Java项目。使用Spring Boot GradlePlugin插件运行是较为简便的一种方式,只需要执行:
项目成功运行后,通过浏览器访问http://localhost:8081即可。如图14-4所示,首页提供了上传的演示界面,上传后,就能看到上传文件的详细信息。
图14-4 上传界面
我们打开application.properties配置文件,可以看到以下配置。
这些配置的含义如下。
·server.address和server.port用来指定文件服务器启动的位置和端口号。
·spring.http.multipart.max-file-size和spring.http.multipart.max-request-size用来限制上传文件的大小,这里设置最大是1MB。
·当spring.data.mongodb.uri没有被指定的时候,默认会采用内嵌MongoDB服务器。如果要使用独立部署的MongoDB服务器,那么设置这个配置,并指定MongoDB服务器的地址。同时,将内嵌MongoDB的依赖注释掉,操作如下。
本文由知识库于2021-09-12发表在龙哥云资源网,如有疑问,请联系我们。本文链接:https://www.longgeyun.com/knowledge/3217.html
上一篇通达信期货通支持什么交易商(通达信期货策略交易)
下一篇网站数据库怎么建(四大国产数据库)
高校最常见的食物中毒有哪些
急性肠胃炎与食物中毒怎么分辨
莫代尔面料和纯棉面料哪个好内裤 哪个儿童可以穿
为什么说开速腾的都不是一般人 速腾开出去有面子吗
活珠子和毛蛋的区别在哪里 哪个好吃
家里放石头的八大禁忌有哪些 家中石头最佳摆放位置
怎么判断自己帅还是丑男 男生怎样越长越帅
单身女生红绳戴左手还是右手 女生红绳戴哪里合适
Pr2020零基础快速入门
文字转语音App最新版3.0
APP下载页源码-带后台