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 в качестве серверной части может принимать файлы любого формата, но сила заключается в возможности обрабатывать его в соответствии с его назначением.