查看文件md5_了解 | Mongodb 文件存储之 GridFs
什么是GridFS
GridFS是一种大型文件存储在MongoDB的文件规范,所有官方支持的驱动都实现了GridFS,GridFS是MongoDB中的一个内置功能。可以保存文件。
为什么要使用GridFS
问题一
问题一:用FTP上传文件,把文件地址保存到MySql数据库,与GridFS有什么区别。答:文件系统到了后期会相当的难以管理,同时不利于扩展,此外做分布式文件系统也会显的很不容易,但是GridFS正好相反,基于MongoDB的文件系统,更加便于管理和扩展。
问题二
问题二:普通文件系统对于大文件处理相当麻烦,需要考虑文件系统自身的限制,GridFS提供了什么好方案。答:GridFS 会把大文件对象分割多个小的chunk,一般为256k/块,每块chunk都将会作为很大的内容文件,此外GridFS和MongoDB的分片可以实现分配到多个服务器上,并且没有增加操作的复杂性。
问题三
问题三:可以把二进制文件保存在MongoDB中吗?答:MongoDB默认的文件大小上限为16MB,所以超过了16MB,就应该使用GridFS。
GridFS的两个集合
GridFS使用两个集合保存一个文件,fs.files与fs.chunks。可以使用下面的命令查看
show collections
fs.files集合包含了文件的元数据,使用命令查看
db.fs.files.findOne();
将会返回如下的内容
{ "_id" : ObjectId("57fb553ac7fa9102e0000001"), "chunkSize" : 261120, "uploadDate" : ISODate("2016-10-10T08:45:50.051Z"), "length" : 1.53513e+008, "md5" : "9222e097e624800fdd9bfb568169ccad", "filename" : "E:/jdk-7u79-linux-x64.tar.gz"}
fs.chunks集合保存的是256KB尺寸进行分割的文件块,如果有分片的集合,可以分到多台服务器上。
db.fs.chunks.getIndexes();
以下是上传完成文件以后的集合文档
{ "0" : { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "gridfs.fs.chunks" }, "1" : { "v" : 1, "key" : { "files_id" : 1, "n" : 1 }, "name" : "files_id_1_n_1", "ns" : "gridfs.fs.chunks" }}
GridFS 基本操作
上传文件
使用GridFS的put命令保存文件。输入如下的命令,实现文件的上传
mongofiles.exe -d gridfs put E:\elasticsearch-1.7.0.zip
列出清单
使用命令查看数据库中的文件的文档
db.fs.files.find()
返回的内容为
/* 1 */{ "_id" : ObjectId("57fb553ac7fa9102e0000001"), "chunkSize" : 261120, "uploadDate" : ISODate("2016-10-10T08:45:50.051Z"), "length" : 1.53513e+008, "md5" : "9222e097e624800fdd9bfb568169ccad", "filename" : "E:/jdk-7u79-linux-x64.tar.gz"}
/* 2 */{ "_id" : ObjectId("57fb6c49c7fa9135d4000001"), "chunkSize" : 261120, "uploadDate" : ISODate("2016-10-10T10:24:09.654Z"), "length" : 3.17848e+007, "md5" : "882013a3d205289dddce22c904d3c476", "filename" : "E:\\elasticsearch-1.7.0.zip"}
查找文件
输入文件的id,可以查看到文件的数据值
db.fs.chunks.find({files_id:ObjectId('57fb553ac7fa9102e0000001')});
以上实例,将会返回50个文档的数据
下载文件
使用get命令下载文件
mongofiles.exe -d gridfs get E:\elasticsearch-1.7.0.zip
Java操作GridFS
添加相关的maven
org.mongodb mongo-java-driver 3.2.2
创建链接
public MongoDatabase mongoDatabase() throws Exception{ MongoClient mongoClient = new MongoClient(mongoHost, mongoPort); return mongoClient.getDatabase(dbName);}
上传文件
@Testpublic void upload() throws Exception { // 获取文件流 File file = new File("E:/zookeeper-3.4.8.tar.gz"); InputStream in = new FileInputStream(file); // 创建一个容器,传入一个`MongoDatabase`类实例db GridFSBucket bucket = GridFSBuckets.create(mongoDatabase()); // 上传 ObjectId fileId = bucket.uploadFromStream(UUID.randomUUID().toString(), in); System.out.println("上传完成。 文件ID:"+fileId);}
查找文件
@Testpublic void findOne() throws Exception { // 获取文件ID String objectId = "57fbaffcec773716ecc54ef4"; // 创建一个容器,传入一个`MongoDatabase`类实例db GridFSBucket bucket = GridFSBuckets.create(mongoDatabase()); // 获取内容 GridFSFindIterable gridFSFindIterable = bucket.find(Filters.eq("_id", new ObjectId(objectId))); GridFSFile gridFSFile = gridFSFindIterable.first(); System.out.println("filename: " + gridFSFile.getFilename());}
下载文件
@Testpublic void download() throws Exception { // 获取文件ID String objectId = "57fbaffcec773716ecc54ef4"; // 获取文件流 File file = new File("D:/zookeeper-3.4.8.tar.gz"); // 创建一个容器,传入一个`MongoDatabase`类实例db GridFSBucket bucket = GridFSBuckets.create(mongoDatabase()); // 创建输出流 OutputStream os = new FileOutputStream(file); // 下载 bucket.downloadToStream(new ObjectId(objectId), os); System.out.println("下载完成。");}
删除文件
@Testpublic void delete() throws Exception { // 获取文件ID String objectId = "57fbaffcec773716ecc54ef4"; // 创建一个容器,传入一个`MongoDatabase`类实例db GridFSBucket bucket = GridFSBuckets.create(mongoDatabase()); // 删除 bucket.delete(new ObjectId(objectId)); System.out.println("删除完成。");}
总结
使用GridFS可以作为文件的存储之一,可以进行使用。也算是一个解决方案
小明菜市场
查看文件md5_了解 | Mongodb 文件存储之 GridFs相关推荐
- MongoDB 文件(MongoDB fs)
1.不管是存储普通数据也好,还是存储文件也好,我们都要先访问MongoDB数据库 public static MongoDatabase GetDataBase(){//MongoDB 服务器地址va ...
- sharepoint文件夹本地同步_干货 | 如何将主机文件自动同步至对象存储
注:最好利用京东云对象存储来存储一些静态文件,不建议用其直接存储数据库之类的数据文件,而且也会受到速度的影响,当然我们可以利用其存储备份文件. 今天我们来利用s3fs工具将京东云对象存储挂载到京东云云 ...
- mysql查看系统运行日志文件_mysql自身运行日志文件详解
概述 日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志可以帮助我们定位mysqld内部发生的事件,数据库 ...
- 服务器怎么查看数据库文件,怎么查看服务器上的数据库文件
怎么查看服务器上的数据库文件 内容精选 换一换 创建sink流将Flink作业数据通过OBS转储方式输出到数据仓库服务(DWS),即Flink作业数据先输出到OBS,然后再从OBS导入到DWS.如何导 ...
- android获取文件上级目录,Android 文件存储
Android 存储位置及 API 一.内部存储 应用安装后都会在Android 根目录生成 /data/data/packagename,当前应用读取不需要读写权限 注意: 有些开发者可能看到过应用 ...
- 如何查看2012服务器登录日志文件,怎样查看2012服务器远程过记录
怎样查看2012服务器远程过记录 内容精选 换一换 添加二级域名解析的流程与普通的方式相同,仅需要保证主机记录不为空即可.现以公网域名example.com为例,说明为二级子域名123.example ...
- 服务器上的文件如何查看,如何查看远程服务器上的文件
如何查看远程服务器上的文件 内容精选 换一换 分析辅助软件是一款支持部署到多台服务器目标环境上,实现对整个业务集群的数据采集和优化的组件.已成功登录Java性能分析.待安装分析辅助软件的服务器已开启s ...
- win7查看隐藏文件_u盘删除文件怎么恢复?
U盘是存储和转移文件的重要工具,为了使用方便和安全,我们常常会将重要文件存储在U盘中.但是有些时候,因为各种原因,U盘中保存的文件不小心被删除了,而比较头痛的是,U盘文件没有电脑系统中的回收站机制,删 ...
- Vbs脚本将本地文件上传到Azure存储账户
说到Azure相信大家都已经非常熟悉了,所以就不做多介绍了,我们都知道在Azure上有一个存储账户,在存储账户下可以可以创建容器,可以存放数据,近期公司呢为了达到数据的安全性,准备将本地的备份数据给A ...
- 看计算机文档有浏览记录吗,怎样查找电脑文件-怎么查看电脑浏览过的文件 – 手机爱问...
2008-06-27 查看网页"文件"菜单下的"属性",发现网页时间都是浏览时间,不是新闻发布时间.那么这个网页文件储存在电脑的哪个位置上?能改变默认位置吗 网 ...
最新文章
- smartupload 上传文件时 把页面编码改成gbk 解决乱码
- ORACLE姚翔,- oalib
- python切片语法-Python新手学习基础之数据类型——字符串的切片截取
- 用Adapter模式重构以前系统的登录权限验证
- 南理工计算机技术专业学位,南京理工大学计算机技术(专业学位)考研难吗
- Linux 命令之 unrar -- 解压 rar 格式的文件
- linux gcc 示例_最好的Linux示例
- python prettytable_让python的print变得更好看——prettytable和colorama
- Algs4-1.3.45栈的可生成性
- tcpserver检测断开qt_QTcpServer或QTcpClient(在服务器端)知道,已连接的客户端现已断开连接...
- 基于springboot的多人聊天系统
- wps无法使用F4重复上一步操作的解决方法
- 证券交易系统搭建的架构方案
- 在Ubuntu里配置slim
- python ogr创建shp
- 多人网络游戏服务器开发基础学习笔记 II: 帧同步 | 游戏客户端预测原理分析 | FPS 游戏状态同步
- iOS开发证书不受信任
- WWDC21主题演讲6 月 8 日凌晨1点开幕
- 我的世界java版特别卡怎么办_我的世界卡顿延迟怎么办
- 人工智能Java SDK:英文翻译为德文