【MongoDB】6.关于MongoDB存储文件的 命令执行+代码执行
2016-12-13 11:42
645 查看
参考:http://www.runoob.com/mongodb/mongodb-gridfs.html
1.命令执行
GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。
GridFS 可以更好的存储大于16M的文件。
GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。
GridFS 用两个集合来存储一个文件:fs.files与fs.chunks。
每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中。
打开命令提示符,进入到MongoDB的安装目录的bin目录中,找到mongofiles.exe,并输入下面的代码:
例如:【将a.mp3文件放在MongoDB目录下】
View Code
1.命令执行
MongoDB GridFS
GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片、音频、视频等)。GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。
GridFS 可以更好的存储大于16M的文件。
GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。
GridFS 用两个集合来存储一个文件:fs.files与fs.chunks。
每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中。
GridFS 添加文件
现在我们使用 GridFS 的 put 命令来存储 mp3 文件。 调用 MongoDB 安装目录下bin的 mongofiles.exe工具。打开命令提示符,进入到MongoDB的安装目录的bin目录中,找到mongofiles.exe,并输入下面的代码:
1 >mongofiles.exe -d gridfs put song.mp3
gridfs是存储文件的数据名称。如果不存在该数据库,MongoDB会自动创建。Song.mp3 是音频文件名。
例如:【将a.mp3文件放在MongoDB目录下】
1 package com.mongo.util; 2 3 4 import java.io.File; 5 import java.io.FileOutputStream; 6 import java.util.ArrayList; 7 import java.util.List; 8 import org.bson.conversions.Bson; 9 import com.mongodb.BasicDBObject; 10 import com.mongodb.MongoClient; 11 import com.mongodb.MongoCredential; 12 import com.mongodb.ServerAddress; 13 import com.mongodb.client.MongoDatabase; 14 import com.mongodb.client.gridfs.GridFSBucket; 15 import com.mongodb.client.gridfs.GridFSBuckets; 16 import com.mongodb.client.gridfs.GridFSFindIterable; 17 import com.mongodb.client.gridfs.model.GridFSDownloadByNameOptions; 18 import com.mongodb.client.gridfs.model.GridFSFile; 19 20 /** 21 * 22 * @author AGEN 23 * 24 */ 25 public class TestMondodb { 26 public static void main(String[] args) { 27 try { 28 //localhost:mongodb服务器的地址, 27017:mongodb服务器的端口 29 ServerAddress serverAddress = new ServerAddress("localhost", 27017); 30 List<ServerAddress> addrs = new ArrayList<ServerAddress>(); 31 addrs.add(serverAddress); 32 //第一个参数report:用户名,第二个参数report:数据库名,第三个参数"sa".toCharArray():密码 33 MongoCredential credential = MongoCredential.createScramSha1Credential("report", "report", "sa".toCharArray()); 34 List<MongoCredential> credentials = new ArrayList<MongoCredential>(); 35 credentials.add(credential); 36 37 //通过连接认证获取MongoDB连接 38 MongoClient mongoClient = new MongoClient(addrs, credentials); 39 40 //连接到数据库 41 MongoDatabase mongoDatabase = mongoClient.getDatabase("report"); 42 43 //创建文件存取通道 44 GridFSBucket gsb = GridFSBuckets.create(mongoDatabase); 45 46 //向mongodb里面写入文件 47 // File file = new File("F:\\500226199001096256.jpg"); 48 // FileInputStream fis = new FileInputStream(file); 49 // ObjectId id = gsb.uploadFromStream("字根.jpg", fis); 50 51 //按Id查找文件,并保存到指定地方 52 //注意,下面ID为fs.files的id, 非fs.chunks的id 53 //如果不行,我就不知道了,你解决后跟我说一下,让我长长见识!thank you 54 FileOutputStream fos = new FileOutputStream(new File("D:\\aaaa.jpg")); 55 // gsb.downloadToStream(new ObjectId("57178cd65eeb4f1f5c2cbaf1"), fos); 56 57 //对于你那个uuid是36位的,可以这样构建条件来查询将下列md5换成你的_id,对应的值换成像的36位uuid即可 58 Bson bson = new BasicDBObject("md5", "4d08209a90345ec9ebb0baf99dd218a1"); 59 GridFSFindIterable gsfi = gsb.find(bson); 60 //因为你的_id是用uuid来表示的,是唯一的,所以应该可以也只能查出一条记录,在此就直接取第一条,否则应该再筛选 61 GridFSFile gfsf = gsfi.first(); 62 //按文件名来取得此文件,第三个参数直接创建,表示取此文件的最新版本,如果需要取较旧的版本,则new GridFSDownloadByNameOptions().revision(0) 63 //其中0为版本号,表示如下 64 // 0 = the original stored file 65 // 1 = the first revision 66 // 2 = the second revision 67 // etc.. 68 // -2 = the second most recent revision 69 // -1 = the most recent revision 70 gsb.downloadToStreamByName(gfsf.getFilename(), fos, new GridFSDownloadByNameOptions()); 71 System.out.println(gfsf.getFilename() + "---" + gfsf.getObjectId() + "---" + gfsf.getId()); 72 } catch (Exception e) { //57178cd65eeb4f1f5c2cbaf2 73 System.err.println(e.getClass().getName() + ":" + e.getMessage()); 74 } 75 } 76 }
View Code
相关文章推荐
- 在代码中给文件设置权限(代码中执行linux命令)
- 关于apache上的CGI文件问题总结--为什么无法找到cgi文件、为什么找到了cgi文件却不执行反而询问是否下载或直接显示文件代码
- 关于执行命令行命令的代码的注意事项
- 关于 文件下载--------代码没有报错,又不弹出下载框,执行下载无反应的问题
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 关于服务代码的几个文件存储路径
- 关于执行命令:sudo apt-get update后的“E: 无法解析或打开软件包的列表或是状态文件”问题解决
- 关于外部引入jQuery代码文件不执行解决方案
- MS SQL执行大脚本文件时,提示“未能完成操作,存储空间不足,无法处理此命令”的解决办法
- 关于swift中的plist文件的写入用来存储信息,例如登录的时候出入信息,这里给一个完成的代码
- Java用cmd&nbsp;&nbsp;执行命令&nbsp;关于文件路径…
- Java如何调用可执行文件和批处理命令
- 制作可执行的JAR文件包及jar命令详解
- 制作可执行的JAR文件包及jar命令详解
- 关于VB中的commondialog(打开文件,存储文件,打开打印机操作控件)
- 关于动态执行代码(js的Eval)
- [转]制作可执行的JAR文件包及jar命令详解zt
- 关于。js文件------内部函数的执行
- 关于PE可执行文件的修改(引用http://www.xfocus.net/articles/200109/266.html)
- 在C#中用最简洁有效的代码执行存储过程并返回数据