Django предоставляет несколько способов сохранения файлов в наши модели, наиболее распространенным является загрузка файла с помощью почтового запроса в Django REST API, и он сохраняется автоматически без небольшого кода, в то время как этот метод прост и просто, преобразование base64 в файл, который приходит в виде строки, всегда будет возвращать ошибки, потому что ему нужно пройти некоторую обработку, прежде чем Django сможет распознать и сохранить его как файл. В этой статье мы узнаем, как сохранить файл base64 в Django REST API.

Предпосылки

Ожидается, что читатель будет знать как Django, так и Python.

Для чего используется Base64?

Согласно RedHat, Base64 используется для кодирования двоичных данных в виде печатного текста, в то же время он позволяет передавать двоичные данные по протоколам или носителям, которые не могут обрабатывать двоичные форматы данных и требуют простой текст.

Настройте свой проект Django.

В этой статье предполагается, что у вас есть работающий проект Django, или вы можете быстро настроить проект в ходе этой статьи.

Создайте функцию, которая принимает строку base64 для возврата файла

Следуйте приведенному ниже коду

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

.....
.....


def convert_base64_to_image(str):
    file_format, file_object = str.split(';base64,')
    file_instance = ContentFile(base64.b64decode(file_object), name="file_name.file_ext")  # File_name & file_ext can be changed
    return file_instance





# models.py
Class CustomUser(models.Model):
    id = models.UUIDField(default=uuid4, primary=True)
    name = models.CharField(max_lenght=200)
    profile_pic = models.FileField(upload_to="upload")






# Somewhere in your serializers.py or views.py

.....
.....
.....
.....

image_str = request.data.get("image") # image str in the request coming from javascipt
user = CustomUser(name="olamilekan Alade")
profile_image = convert_base64_to_image(image_str)
user.profile_pic.save(f"{user.id}-profile.png", profile_image)



Пояснение кода

Приведенный выше код может показаться немного неуклюжим, но не волнуйтесь, мы расшифруем его вместе.

Шаг 1

нам нужно импортировать base64 и ContentFile. Основная функция Base64 помогает декодировать нашу строку, а ContentFile помогает преобразовать нашу строку в файл.

Шаг 2

Мы создали функцию под названием convert_base64_to_image, которая принимает строку (base64) в качестве аргумента для возврата файлового объекта.

Шаг 3

Мы вызвали функцию и передали строку base64 из запроса javascript в качестве аргумента для получения файлового объекта.

Сводка

Преобразование base64 в файл в Django является обязательным, потому что Django не обрабатывает строку base64 как файл, за исключением того, что мы говорим ему сделать это. Итак, с помощью этого руководства мы можем расшифровать наш base64 и преобразовать его в файл для удобства использования. Django в качестве серверной части может принимать файлы любого формата, но сила заключается в возможности обрабатывать его в соответствии с его назначением.