mongodb自带的分布式文件系统

mongodb自带的分布式文件系统,第1张

概述介绍《mongodb自带的分布式文件系统》开发教程,希望对您有用。

《mongodb自带的分布式文件系统》要点:
本文介绍了mongodb自带的分布式文件系统,希望对您有用。如果有疑问,可以联系我们。

欢迎参与《mongodb自带的分布式文件系统》讨论,分享您的想法,内存溢出PHP学院为您提供专业教程。

mongodb除了能够存储大量的数据外,还内置了一个非常好用的文件系统.

基于mongodb集群的优势,GrIDFS当然也是分布式的,而且备份也方便.

当用户把文件上传到GrIDFS后,文件会被分割成大小为256KB的块,并单独存放.

好处如下:

1.可以有Replication;

2.可以利用MongoDB的权限访问控制;

3.可以利用现成的MongoDB备份方式;

今天主要是学习如何使用data这个框架来 *** 作GrIDFS,首先配置grIDFs的模板类

<!-- Mongodb grIDFs的模板 -->

<bean ID="grIDFstemplate" >

<constructor-arg ref="mongoDbFactory" />

<constructor-arg ref="mapPingConverter" />

</bean>

/**

* 上传文件

* @author yinjihuan

* @throws Exception

*/

public static voID uploadfile() throws Exception {

file file = new file("/Users/yinjihuan/Downlaods/logo.png");

inputStream content = new fileinputStream(file);

//存储文件的额外信息,比如用户ID,后面要查询某个用户的所有文件时就可以直接查询

DBObject Metadata = new BasicDBObject("userID","1001");

GrIDFSfile grIDFSfile = grIDFstemplate.store(content,file.getname(),"image/png",Metadata);

String fileID = grIDFSfile.getID().toString();

System.out.println(fileID);

}

文件默认是上传到数据中的fs.files和fs.chunks中

files是用来存储文件的信息,文件名,md5,文件大小,还有刚刚的Metadata,上传时间等等数据,数据格式如下:

{

"_ID": ObjectID("57c17bb0d4c666b6e53ba795"),

"Metadata": {

"user_ID": 1001

},

"filename": "file",

"aliases": null,

"chunkSize": NumberLong(261120),

"uploadDate": ISODate("2016-09-08T11:38:24.999Z"),

"length": NumberLong(165253),

"ContentType": "image/png",

"md5": "668727a643ddd6df2e98f164d9fc90fd"

}

chunks则是用来存储文件内容的

1.files_ID就是文件的ID,也就是files集合中的_ID

2.n是文件块的索引,通常文件会被分割成256KB的块大小存储

3.data就是文件的数据了

当需要访问文件的时候通过文件ID可以找到文件被分成了多少块,然后从第一块按顺序开始读取,返回给用户.

{

"_ID": ObjectID("57c18993d4c6355ffeb6f8ae"),

"files_ID": ObjectID("57c17bb0d4c666b6e53ba795"),

"n": 0,

"data": BinData(0,"iVBORw0KGgDSDDSDDSD5xNvmxT5/sHLl5oDl/Y/NtznsPTPllg9+GqIE+Yj5xNvmxT5/sHLl5oDl/Y/NtznsPTPllg9+GqIE+YjoA")

}

{

"_ID": ObjectID("57c18993d4c6355ffeb6f8ae"),

"n": 1,

"data": BinData(1,"iVBORw0KGgDSDDSDDSD5xNvmxT5/sHLl5oDl/Y/NtznsPTPllg9+GqIE+Yj5xNvmxT5/sHLl5oDl/Y/NtznsPTPllg9+GqIE+YjoA")

}

/**

* 根据文件ID查询文件

* @author yinjihuan

* @param fileID

* @return

* @throws Exception

*/

public static GrIDFSDBfile getfile(String fileID) throws Exception {

return grIDFstemplate.findOne(query.query(Criteria.where("_ID").is(fileID)));

}

/**

* 根据文件ID删除文件

* @author yinjihuan

* @param fileID

* @throws Exception

*/

public static voID removefile(String fileID) throws Exception {

grIDFstemplate.delete(query.query(Criteria.where("_ID").is(fileID)));

}

如果在Spring mvc中想直接访问存储的文件也很简单,直接通过文件ID查询该文件,然后直接输出到response就是了,记得要设置ContentType,这时就明白为什么存储的时候要把ContentType存起来了.

/**

* 访问图片

* @author yinjihuan

* @param fileID

* @param request

* @param response

*/

@RequestMapPing(value = "/image/{fileID}")

@ResponseBody public voID getimage(@PathVariable String fileID,httpServletResponse response) {

try {

GrIDFSDBfile grIDfs = filesService.getfile(fileID);

response.setContentType(grIDfs.getContentType());

OutputStream out = response.getoutputStream();

grIDfs.writeto(out);

out.flush();

out.close();

} catch (Exception e) {

e.printstacktrace();

}

}

源码下载:https://github.com/yinjihuan/cxytiandi

总结

以上是内存溢出为你收集整理的mongodb自带的分布式文件系统全部内容,希望文章能够帮你解决mongodb自带的分布式文件系统所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1152582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存