Django使用models.ImageField将base64字符串保存到文件系统

5
我正在尝试使用Python Django将图像上传到文件系统。我不知道如何继续操作。
在我的model.py文件中:
Class Test(object):
    mission = models.TextField(blank=True)
    image = models.ImageField(upload_to='documents/images/',blank=True)
    account = models.OneToOneField(Account, related_name='account')

在我的view.py中。
def add_image(request, account):
    req = get_request_json(request)
    data = Test.objects.add_image(account, req)

在我的manager.py中

Class TestManager(models.Manager):
    def add_image(self, account, input):
        acc = self.get(account=account)
        acc.save()

        return acc;

但是我不确定如何从这里继续。

我想知道如何将base64图像字符串保存到指定位置并将路径/文件名存储在数据库中?

我已经使用Python工作过,在那里我将文件写入目录并获取路径并存储在数据库中。在这里,我想使用Django选项。

我还必须使用其他文件格式重复相同的过程。

1个回答

7

如果你有一个以base64字符串格式表示的图片,并且想要将它保存到模型的ImageField中,那么我会这样做:

import base64
from django.core.files.base import ContentFile

image_b64 = request.POST.get('image') # This is your base64 string image
format, imgstr = image_b64.split(';base64,')
ext = format.split('/')[-1]
data = ContentFile(base64.b64decode(imgstr), name='temp.' + ext)

现在,您可以简单地执行
Test.objects.create(image=data)

我在这一行 data = ContentFile(base64.b64decode(imgstr), name='temp.' + ext) 中遇到了错误 字符串参数应只包含ASCII字符 - Tony Roczz
如果删除 base64.b64decode 并使用 data = ContentFile(imgstr, name='temp.' + ext),则会出现 <ImageFieldFile: None> is not JSON serializable 错误。 - Tony Roczz
@Dalvtor,是否可以使用模型表单实例来执行此操作,如 form = UploadPicForm() 然后 form.image = data - squal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接