MongoEngine-GridFS


在MongoDB中,大于16MB的文件采用GridFS规范存储。一个文件被分为多个块,每个块的默认大小为 255KB。大块可以根据需要尽可能大。GridFS 使用两种集合,一种用于块,另一种用于元数据。

如果您想访问任何文件而不必将其完全加载到内存中,则可以使用 GridFS 来存储该文件。

MongoEngine API 通过FileField对象支持 GridFS 。使用该对象,可以插入和检索数据。FileField 对象的put()方法有助于将文件写入为 Document 的一部分。

from mongoengine import *
con=connect('newdb')

class lang (Document):
   name=StringField()
   developer=StringField()
   logo=FileField()

l1=lang()
l1.name='Python'
l1.developer='Van Rossum'
f=open('pylogo.png','rb')
l1.logo.put(f,content_type='image/png')
l1.save()

FileField 的内容可以通过 Python File 对象的 read() 方法检索。

logo = l1.logo.read()

还有delete()方法来删除存储的文件。

l1 = lang.objects(name='Python').first()
l1.logo.delete()
l1.save()

请注意,FileField 仅将文件的 ID 存储在单独的 GridFS 集合中。因此,delete() 方法不会物理删除文件。

Replace ()方法有助于用另一个文件替换文件的引用。

l1 = lang.objects(name='Python').first()
f=open('newlogo.png','rb')
l1.logo.replace(f,content_type='image/png')
l1.save()