从GridFs文件\u id或GridFSProxy创建Mongoengine FileField

2024-04-25 22:20:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个存储在mongodb中fs集合(GridFs)中的字符串文件_id。在

我需要将文件作为mongoengine FileField存储在文档中,然后将文件返回到端点。。。所以访问文件的内容、内容类型等

我不知道如何用GridFs字符串id创建一个FileField实例?是否可以从FileField获取内容和内容类型?在

我看过的教程都涉及到通过将内容写入mongodb来创建FileField,区别在于我的内容已经在GridFs中,我有字符串id

class Test(Document):
    file = FileField()

test = Test()
test.upload.put(image_file, content_type='image/png')

到目前为止,我已经能够使用id创建一个GridFsProxy对象,并且可以使用这个来读取文件。在

^{pr2}$

如果我将GridFSProxy的read()结果存储到FileField();它将作为ObjectID存储在MongoDb中,然后当我检索对象时,似乎无法获得文件的内容类型。 我需要内容类型,因为它对我如何返回文件内容很重要。在

我不知道如何仅使用file_id创建FileField,然后在检索文档时使用它。在

深入了解如何使用FileField(和GridFSProxy)将很有帮助。在


Tags: 文件对象字符串文档testimageid类型
1条回答
网友
1楼 · 发布于 2024-04-25 22:20:24

FileField基本上只是一个引用(ObjectId),指向实际的gridfs文档(存储在fs.块/fs文件)。访问content_类型应该很简单,您根本不必使用GridFSProxy类,请参见以下内容:

from mongoengine import *

class Test(Document):
    file = FileField()

test = Test()
image_bytes = open("path/to/image.png", "rb")
test.file.put(image_bytes, content_type='image/png', filename='test123.png')
test.save()

Test.objects.as_pymongo()   # [{u'_id': ObjectId('5cdac41d992db9bfcaa870df'), u'file': ObjectId('5cdac419992db9bfcaa870dd')}]

t = Test.objects.first()
t.file              # <GridFSProxy: 5cdac419992db9bfcaa870dd>
t.file.content_type     # 'image/png'
t.file.filename         # 'test123.png'
content = t.file.read()

相关问题 更多 >