GridFS
作者:互联网
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集合中。
使用
调用 MongoDB 安装目录下bin的 mongofiles.exe工具
具体操作
-
存储文件:
mongofiles –d database put filename
-
获取文件:
mongofiles –d database -l new_filename get filename
-
删除文件:
mongofiles –d database delete filename
-
存储文件:
mongofiles –d database -l filename put new_filename
以这种命令上传文件,文件名为new_filename,不会携带路径 -
查看文件列表:
mongofiles -d database list
-
查找文件:
mongofiles -d database search test.txt
pymongo操作
from pymongo import MongoClient
from gridfs import GridFS
client = MongoClient()
database = client.get_database('files')
gf = GridFS(database=database)
res = gf.find_one()
print(res)
{'_GridOut__buffer': b'',
'_GridOut__chunk_iter': None,
'_GridOut__chunks': Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'files'), 'fs.chunks'),
'_GridOut__file_id': None,
'_GridOut__files': Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'files'), 'fs.files'),
'_GridOut__position': 0,
'_file': {'_id': ObjectId('6236e52955dd69298cc54a16'),
'chunkSize': 261120,
'filename': 'test.txt',
'length': 18,
'md5': '7552e7c2987420e42fa1b19a0988c7a1',
'uploadDate': datetime.datetime(2022, 3, 20, 8, 26, 17, 943000)},
'_session': None}
# 打印文件列表['filename1','filename2',...]
print(gf.list())
# 下载文件
with open('./gettest.txt','wb') as f:
for line in gf.get(res._id):
f.write(line)
# 上传文件
with open('./gettest.txt','rb') as f:
gf.put(f.read(),filename='gettest.txt')
标签:files,文件,database,filename,GridFS,mongofiles 来源: https://blog.csdn.net/General_zy/article/details/123615116