其他分享
首页 > 其他分享> > GridFS

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工具
在这里插入图片描述

具体操作

  1. 存储文件:mongofiles –d database put filename
    在这里插入图片描述
    在这里插入图片描述

  2. 获取文件:mongofiles –d database -l new_filename get filename
    在这里插入图片描述

  3. 删除文件:mongofiles –d database delete filename
    在这里插入图片描述

  4. 存储文件:mongofiles –d database -l filename put new_filename
    以这种命令上传文件,文件名为new_filename,不会携带路径

  5. 查看文件列表:mongofiles -d database list
    在这里插入图片描述

  6. 查找文件: 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