Django: использование base64 для хранения изображений в БД - PullRequest
0 голосов
/ 26 марта 2019

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

Входной 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-файл, который пользователь устанавливает как 'logo 'to base64, чтобы сохранить его в моей БД, а затем декодировать, чтобы получить изображение там, где оно мне нужно.

Конечно, я делаю что-то не так, думаю, это на мой взгляд.Как я могу обработать значение поля формы logo, чтобы преобразовать его в base64?

Я не храню необработанный файл в любой папке.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Не лучше ли сохранить логотип в ImageField?

Если вы хотите сохранить изображение base64, вы всегда можете сохранить его в TextField в виде строки, если вы толькохочу показать изображение позже.

0 голосов
/ 27 марта 2019

Решение:

if form.is_valid():
            logo = form.cleaned_data.get('logo')
            print(logo)
            logo = base64.b64encode(logo.file.read())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...