files上传下载
利用mongoengine models fileField实列 进行图片的上传和下载。(使用用IO,PIL类库)
创建models
from mongoengine import *
classGridPicture(Document):
des=StringField()
pic=FileField()
上传图片
frommodels.modelsimportGridPicture
#创建models实列
gridpic=GridPicture(des="this is a picture")
#将图片转化为字节流
pic_stream=open("1.png","rb")
#上传图片流
gridpic.pic.put(open_pic,content_type='image/png')
gridpic.save()
文档中的 FileField 实际上仅将文件的 ID 存储在单独的 GridFS 集合中。
读取并下载图片
1.mongoengine
#读取图片
pic_queryset=GridPicture.objects().first()
pic_stream=pic_queryset.pic.read()
print(pic_stream)#返回流
#通过字节流转换为图片
importos
fromioimportBytesIO
fromPILimportImage
bytes_stream=BytesIO(pic_stream)# 将bytes结果转化为字节流
roiimg=Image.open(bytes_stream)#读取图片
#roiimg.show()
imgByteArr=BytesIO()# 初始化一个空字节流
roiimg.save(imgByteArr,format('PNG'))# 把我们得图片以‘PNG’保存到空字节流
imgByteArr=imgByteArr.getvalue()# 无视指针,获取全部内容,类型由io流变成bytes。
# dir_name = os.mkdir('imges')
img_name='1.png'
withopen(os.path.join('img',img_name),'wb')asf:
f.write(imgByteArr)#写入指定位置,生成图片
网友评论