问题引入:
mongodb如何存取图片及等其他非文档型文件,或者说大于16M的文件。例如pdf文件,大图片文件等。
解决方案
MongoDB内置一套文件系统名为GridFS(Grid File System),我们可以使用它来存储大于16M的文件。
GridFS具有分布式管理文件的能力,可以突破一般文件系统对file的限制,分段存储,不像普通文件系统是整个存储的。这样读取大型文件时就不会占用大量的内存。
GridFS会将文件存储在两个Document里:
1.Chunks用来存储二进制数据
2.Files用于存储基本文件信息
gridfs介绍
GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片、音频、视频等),适合于不常改变但是经常需要连续访问的大文件。GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。
GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。
其中,files中存储文件的元信息,默认使用集合为fs.files,键定义如下:
_id 主键
length 文件所包含的字节数
chunkSize 组成文件的每个块的大小,单位为字节,默认值为256KB,可调整
uploadDate 文件被上传到GridFS的日期
md5 文件内容的MD5校验值,该值由服务器端测试得到
每一个文件存储的各个chunk的files_id相同
代码演练
import pymongo
from gridfs import GridFS
from bson.objectid import ObjectId
class MongoGridFS(object):
UploadCache = "uploadcache"
dbURL = "mongodb://192.168.20.120:27010"
def __init__(self, params):
'''
Constructor
'''
# 上传文件
def