Django中Mongodb数据库上传图片的问题(实例)

1.问题概述

在利用mongodb作为Django项目的数据库时,上传图片会用到:
mongoengine.ImageField()这个方法定义图片属性,
但是由于这个方法并没有像在使用mysql数据库时的:
models.ImageField('图片', upload_to='photos', blank=True)方法,
而直接使用又会报出如下错误:
AttributeError: 'InMemoryUploadedFile' object has no attribute 'grid_id'
因此在查了大量资料后,我这里找到了比较好的代替方案
PS:有知道mongoengine.ImageField()方法正确食用机巧的大神,求指点

2.解决方案

保存图片到指定文件夹==>将图片路径保存到数据库
也就是自己手动写出保存文件和和保存文件路径的代码(自己动手丰衣足食)

3.示例

这里是一个上传头像以及在网页中显示图像的示例

models.py

head_img = mongoengine.StringField(max_length=100, default="/static/blog/images/head_image/heike.ico")
Django中Mongodb数据库上传图片的问题(实例)_第1张图片
image.png

views.py

 head_img = request.FILES["head_img"]

# 保存图片文件到本地磁盘
# with open(str(head_img), "wb") as f:
#     f.write(head_img)
img = Image.open(head_img)
img_name = str(head_img).replace("/", "_")
img_path = "blog/static/blog/images/head_image/" + login_username + "_" + img_name
img.save(img_path)
# 用于保存到数据库的地址,为了调用做出改动
img_path_save = "/static/blog/images/head_image/" + login_username + "_" + img_name

models.User.objects.filter(username=login_username).update(head_img=img_path_save)
Django中Mongodb数据库上传图片的问题(实例)_第2张图片
image.png

templates

return render(request, "blog/index.html", {"login_user": login_user})


image.png

你可能感兴趣的:(Django中Mongodb数据库上传图片的问题(实例))