设为首页 收藏本站
查看: 915|回复: 0

[经验分享] 奋小斗Struggle Young

[复制链接]

尚未签到

发表于 2017-12-14 23:43:44 | 显示全部楼层 |阅读模式
GridFS 介绍
  GridFS是MongoDB规范用于存储和检索大文件,如图片,音频文件,视频文件等。这是一种文件系统用来存储文件,但数据存储于MongoDB集合中。GridFS存储文件比其文档大小16MB限制的更大能力。
  GridFS的划分一个文件分成块存储数据每个块在一个单独的文件,每个最大尺寸255K。
  GridFS默认使用两个集合 fs.files 和 fs.chunks 存储该文件的元数据和块。每组块标识其唯一的_id ObjectID字段。fs.files切断作为父文件。 fs.chunks 文档 files_id 字段链接块到其父文件。
  以下是fs.files集合的样本文件:
  

{  "filename": "test.txt",
  "chunkSize": NumberInt(261120),
  "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
  "md5": "7b762939321e146569b07f72c62cca4f",
  "length": NumberInt(646)
  
}
  

  文件指定的文件名,块大小,上传日期,和长度。
  以下是 fs.chunks 文件的样本文件:
  

{  "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
  "n": NumberInt(0),
  "data": "Mongo Binary Data"
  
}
  

将文件添加到GridFS:
  现在,我们将使用GridFS的put命令存储MP3文件。 为此,我们将使用存在于MongoDB的安装文件夹下的bin文件夹的mongofiles.exe工具。
  打开命令提示符,导航到MongoDB的安装文件夹下的bin文件夹中的mongofiles.exe,并键入下面的代码:
  

>mongofiles.exe -d gridfs put song.mp3  

  这里,gridfs上在文件存储在数据库的数据库名称。 如果数据库不存在,MongoDB会自动动态创建一个新文档。 Song.mp3的是上载的文件的名称。要查看数据库文件的文件,你可以使用查询找到:
  

>db.fs.files.find()  

  上面的命令返回以下文档:
  

{  _id: ObjectId('534a811bf8b4aa4d33fdf94d'),
  filename: "song.mp3",
  chunkSize: 261120,
  uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
  length: 10401959
  
}
  

  我们也可以看到在fs.chunks集合涉及使用下面的代码保存的文件都存在于块中,使用以前的查询返回文档ID:
  

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})  

  在我的示例中,该查询返回40个文档,是整个MP3文件划分成的40块数据。
  前言
  GridFS是一种将大型文件存储在MongoDB的文件规范:
  数据库支持以BSON格式保存二进制对象。 但是MongoDB中BSON对象最大不能超过4MB。
  GridFS 规范提供了一种透明的机制,可以将一个大文件分割成为多个较小的文档。
  为实现这点,该规范指定了一个将文件分块的标准。每个文件都将在文件集合对象中保存一个元数据对象,一个或多个块对象可被组合保存在一个块集合中。
  上传文件


  • Shell
  mongofiles put xxx.txt
  常用参数如下:
  -d 指定数据库
  -u –p 指定用户名,密码
  -h 指定主机
  -port 指定主机端口
  -r 如果存在同名文件则在put成功后删除其他同名文件
  通过这样的命令就可以把文件上传到fs集合中。


  • Java
  //获取db
  MongoClient mClient = new MongoClient("10.211.55.8");
  db = mClient.getDB("test");
  //得到Gridfs对象
  GridFS fs = new GridFS(db);
  //访问要上传的文件
  File file = new File("/Users/luoaz/05testDir/files/test1.txt");
  //执行保持
  GridFSInputFile gfFile = fs.createFile(file);
  gfFile.save();
  下载文件


  • Shell
  mongofiles get xxx.txt
  常用参数如下:
  -d 指定数据库
  -u –p 指定用户名,密码
  -h 指定主机
  -port 指定主机端口
  -l 下载到本地的文件名,默认和数据库中的名字一致
  通过这样的命令就可以把文件从fs集合中下载到本地。


  • Java
  Java 下载的重点是怎么获取到文件流,获取到文件流后就跟普通的保持文件到本地一样了。
  //获取db
  MongoClient mClient = new MongoClient("10.211.55.8");
  db = mClient.getDB("test");
  //得到Gridfs对象
  GridFS fs = new GridFS(db);
  //要下载到的文件路径
  File file = new File("/Users/files/down_test1.txt");
  FileOutputStream os = new FileOutputStream(file);
  //获得文件流
  InputStream is = fs.findOne(new BasicDBObject("filename","test1.txt")).getInputStream();
  //下载
  byte[] bytes = new byte[1024];
  while(is.read(bytes)>0){
  os.write(bytes);
  }
  os.flush();
  os.close();
  删除文件


  • Shell
  mongofiles delete xxx.txt
  删除指定名称的文件,如果存在同名文件则都删除
  常用参数如下:
  -d 指定数据库
  -u –p 指定用户名,密码
  -h 指定主机
  -port 指定主机端口


  • Java
  //获取db
  MongoClient mClient = new MongoClient("10.211.55.8");
  db = mClient.getDB("test");
  //得到Gridfs对象
  GridFS fs = new GridFS(db);
  //删除指定文件名称的文件
  fs.remove("test1.txt");
  查看文件


  • Shell
  1、list
  显示所有文件
  mongofiles list xx.txt
  显示所有的指定文件名的文件
  2、search
  搜索指定名称的文件,可以模糊搜索
  mongofiles list xx.txt
  mongofiles list .txt


  • Java
  这个就跟MongoDB的find用法一样了
  /*//保存文件
  GridFSFile file = myFS.createFile(new File("D:/aa.png"));  
  file.save();  */
  //输出文件  
  GridFSDBFile file1 =myFS.findOne("aa.png");
  file1.writeTo(new File("D:/image1.png"));
  //删除文件  
  /*GridFSDBFile file =myFS.findOne("image1.jpg");
  myFS.remove((ObjectId) file2.getId());*/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424196-1-1.html 上篇帖子: centos7 mongodb 3.4 yum 安装 下篇帖子: JAVA 操作MongoDB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表