mongoengine的FileField的使用

mongoengine的FileField的使用


  这两天在用scrapy框架进行爬虫的时候,需要MongoDB对爬下来的图片进行保存。 这里用到Mongoengine对MongoDB进行操作。之前有用到Mongoengine,但是从来没用到过FileField,这里通过查阅官方文档,对FileFile有了初步的认识。记录一下

GridFS

  MongoDB中存文件的方式是用到了GridFS来进行存储的,有兴趣的人可以查看有关GridFS的相关资料。简单来讲,GridFS就是将一个大文件分成很多小块来进行存储的,这样可以满足对整个大文件的存储。
  mongoengine对整个GridFS的支持,开始于整个FileField的,也就是说FileFiled在内部存储方面是使用GridFS来存储的。

FileField

  FileField提供了多种方式来存储文件和取到数据,同时有关文件的元信息(比如说文件类型等信息),也可以随着文件进行存储,这里给出一个简单的例子。

import mongoengine

class IdorImage(mongoengine.Document):
    description = mongoengine.StringField()
    image = mongoengine.FileField() # FileField 文件类型

  上面定义了简单的 IdorImage来进行存储文档,下面给出一个简单的例子,看看怎么使用它。

# 这里默认导入了我们上面定义的类型
def save_image(path):
   '''
     :param path: 图片的类型
   '''
	image_file = open(path,'rb') # 读取图片
	pic = IdorImage(description= 'this is a demo image')
	pic.image.put(image_file, content_type='image/jpeg')
	pic.save() # 保存文件

  上面的例子中,我们已经可以看到FileField类型怎么去使用了,现在我们还需要知道他们怎么去从数据库中取回的,怎么去检索。

 # 这里默认导入了之前的类型
 image_first = IdorImage.objects(desription="this is a demo image").first()
 image = image_first.image.read()
 content_type = image.image

  上面的代码就是简单实现了从数据库中读取文件的操作,更深入的操作可以查看官方文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值