小女巫 发表于 2015-1-16 11:43:33

来谈谈:MongoDB进修条记(五) MongoDB文件存取操纵

文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln
因为MongoDB的文档布局为BJSON格局(BJSON全称:BinaryJSON),而BJSON格局自己就撑持保留二进制格局的数据,因而能够把文件的二进制格局的数据间接保留到MongoDB的文档布局中。可是因为一个BJSON的最年夜长度不克不及凌驾4M,以是限定了单个文档中能存进的最年夜文件不克不及凌驾4M。为了供应对年夜容量文件存取的撑持,samus驱动供应了“GridFS”体例来撑持,“GridFS”体例文件操纵必要引进新的程序集“MongoDB.GridFS.dll”。上面我们分离用两种体例来完成。
1、在文档工具中存取文件
  当文件巨细较小的时分,间接存进文档工具完成起来更简便。好比大批图片文件的存取等,一样平常图片文件都不会凌驾4M。我们先完成一个上传图片存进数据库,再掏出来写回页面的例子:
  1.把图片存到BJSON中
.代码以下:

///<summary>
///把图片存到BJSON中
///</summary>
publicvoidSaveImgBJSON(byte[]byteImg)
{
Documentdoc=newDocument();
doc["ID"]=1;
doc["Img"]=byteImg;
mongoCollection.Save(doc);
}


2.猎取BJSON体例存储的图片字节数据
.代码以下:

///<summary>
///猎取BJSON体例存储的图片字节数据
///</summary>
publicbyte[]GetImgBJSON()
{
Documentdoc=mongoCollection.FindOne(newDocument{{"ID",1}});
returndoc["Img"]asBinary;
}



下面两段代码是在对MongoDB相干操纵举行BLL封装类中增加的两个办法,封装体例检察上节内容。上面看看在webform中怎样挪用:
  在界面拖出一个FileUpload控件和一个Button控件,页面cs类加以下办法:
.代码以下:

protectedvoidButton1_Click(objectsender,EventArgse)
{
ImgBLLimgBll=newImgBLL();
imgBll.DeleteAll();
imgBll.SaveImgBJSON(FileUpload1.FileBytes);
Response.BinaryWrite(imgBll.GetImgBJSON());
}


2、用GridFS体例存取文件
  在完成GridFS体例前我先讲讲它的道理,为何能够存年夜文件。驱动起首会在以后数据库创立两个汇合:"fs.files"和"fs.chunks"汇合,前者纪录了文件名,文件创立工夫,文件范例等基础信息;后者分块存储了文件的二进制数据(并撑持加密这些二进制数据)。分块的意义是把文件依照指定巨细支解,然后存进多个文档中。"fs.files"怎样晓得它对应的文件二进制数据在哪些块呢?那是由于在"fs.chunks"中有个"files_id"键,它对应"fs.files"的"_id"。"fs.chunks"另有一个键(int型)"n",它标明这些块的前后按次。这两个汇合名中的"fs"也是能够经由过程参数自界说的。
  假如你只是想晓得怎样用,能够疏忽下面这段话,上面将用法:
  1.GridFS体例的文件新建,读取,删除
.代码以下:

privatestringGridFsSave(byte[]byteFile)
{
stringfilename=Guid.NewGuid().ToString();

//这里GridFile机关函数有个重载,bucket参数就是用来交换谁人创立汇合名中默许的"fs"的。
GridFilegridFile=newGridFile(mongoDatabase);
using(GridFileStreamgridFileStream=gridFile.Create(filename))
{
gridFileStream.Write(byteFile,0,byteFile.Length);
}
returnfilename;
}

privatebyte[]GridFsRead(stringfilename)
{
GridFilegridFile=newGridFile(mongoDatabase);
GridFileStreamgridFileStream=gridFile.OpenRead(filename);
byte[]bytes=newbyte;
gridFileStream.Read(bytes,0,bytes.Length);
returnbytes;
}

privatevoidGridFsDelete(stringfilename)
{
GridFilegridFile=newGridFile(mongoDatabase);
gridFile.Delete(newDocument("filename",filename));
}


2.再次封装GridFS操纵,新文档只存储文件称号,相称于只是一个键,新文档还能够有除“文件名”以外其他的键。
.代码以下:

///<summary>
///把图片存到GridFS中
///</summary>
publicvoidSaveImgGridFS(byte[]byteImg)
{
stringfilename=GridFsSave(byteImg);

Documentdoc=newDocument();
doc["ID"]=1;
doc["filename"]=filename;
mongoCollection.Save(doc);
}

///<summary>
///猎取GridFS体例存储的图片
///</summary>
publicbyte[]GetImgGridFS()
{
Documentdoc=mongoCollection.FindOne(newDocument{{"ID",1}});
stringfilename=doc["filename"].ToString();
returnGridFsRead(filename);
}


3、小结
  文件存取应当不是很难,值得注重的中央是:用第一种体例从文档中读出二进制数据时,必定要将范例转换为“Binary”范例;另有体系自带的键“_id”,它也不是string范例,是“Oid”范例的。
李盼(Lipan)
出处:(http://www.ckuyun.com/lipan/)

学习python,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。

再现理想 发表于 2015-1-16 22:23:54

来谈谈:MongoDB进修条记(五) MongoDB文件存取操纵

再次,Linux是用C语言编写的,我们有学习C语言的基础,读程序和编写代码方面存在的困难小一点,也是我们能较快掌握的原因之一。?

小女巫 发表于 2015-1-19 10:55:50

在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。

乐观 发表于 2015-1-28 06:10:30

掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。

再见西城 发表于 2015-2-5 19:24:40

另外Linux上也有很多的应用软件,安装运行了这些软件后,你就可以在Linux上编辑文档、图?片,玩游戏、上网、播放多媒体文件等。

兰色精灵 发表于 2015-2-13 07:48:28

就这样,我们一边上OS理论课,一边上这个实验,这样挺互补的,老师讲课,一步一步地布置任务

若天明 发表于 2015-3-3 19:33:48

Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问。

山那边是海 发表于 2015-3-11 13:13:19

笔者五分钟后就给出了解决方法: “首先备份原文件到其他目录,然后删掉/usr/local/unispim/unispimsp.ksc,编辑 /usr/local/unispim/unispimsp.ini,最后重启动计算机

分手快乐 发表于 2015-3-26 16:12:53

Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
页: [1]
查看完整版本: 来谈谈:MongoDB进修条记(五) MongoDB文件存取操纵