Django:使用base64将图像存储在数据库中

时间:2019-03-26 15:36:21

标签: python django file base64 storage

models.py:

class Empresa(models.Model):
    logo = models.FileField(null=True)

forms.py:

class ConfiEmpresa(ModelForm):
    logo = forms.FileField(required=False)
    class Meta:
        model = Empresa

form字段正在呈现的html输入代码如下:

<input type="file" name="logo" id="id_logo">

views.py:

import base64

def configempresa(request):
    if request.method == "POST":
        form = ConfiEmpresa(request.POST, request.FILES)
        print(form.errors)  # I'm not having any form error here
        if form.is_valid():
            logo = form.cleaned_data.get('logo')
            print(logo)  # It's printing "None"
            logo = base64.encodebytes(logo)
            #...rest of the view

我得到的错误:

TypeError at /Config/empresa/
expected bytes-like object, not NoneType

因此,总而言之,我正在尝试将用户设置为“徽标”的jpg文件转换为base64,以便将其存储在数据库中,并在以后对其进行解码,以将其获取到需要的位置。

我当然做错了,我认为这是我的观点。如何处理表单字段logo的值以将其转换为base64?

我没有将原始文件存储在任何文件夹中。

2 个答案:

答案 0 :(得分:1)

将徽标保存在ImageField中会更好吗?

如果要保存base64图像,只要以后只显示图像,就可以始终将其作为字符串保存在TextField中。

答案 1 :(得分:0)

解决方案:

if form.is_valid():
            logo = form.cleaned_data.get('logo')
            print(logo)
            logo = base64.b64encode(logo.file.read())