来谈谈: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,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。
来谈谈:MongoDB进修条记(五) MongoDB文件存取操纵
再次,Linux是用C语言编写的,我们有学习C语言的基础,读程序和编写代码方面存在的困难小一点,也是我们能较快掌握的原因之一。? 在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。 掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。 另外Linux上也有很多的应用软件,安装运行了这些软件后,你就可以在Linux上编辑文档、图?片,玩游戏、上网、播放多媒体文件等。 就这样,我们一边上OS理论课,一边上这个实验,这样挺互补的,老师讲课,一步一步地布置任务 Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问。 笔者五分钟后就给出了解决方法: “首先备份原文件到其他目录,然后删掉/usr/local/unispim/unispimsp.ksc,编辑 /usr/local/unispim/unispimsp.ini,最后重启动计算机 Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
页:
[1]