Преобразование base64 в файл .jpg, затем сохранение в базе данных Django - PullRequest
0 голосов
/ 02 марта 2020
def upload_image(request):
    if request.is_ajax and request.POST:
        image = request.POST.get('image')

        image_name = request.POST.get('image_name')

        imgdata = base64.b64decode(image + '==')

        extension = image_name.split('.')[1].lower()

        image_name = '{}_{}_profile_image.{}'.format(request.user.first_name, request.user.last_name, extension)

        with open(image_name, "wb") as image_file:
            image_file.write(imgdata)

        upload = ProfileImage(
            file=image_file,
            user = request.user.username
            )
        upload.save()
    data = {

    }
    return JsonResponse(data)

Я пытаюсь обрезать изображения в Django, используя Cropp ie. js. Затем изображения загружаются в корзину S3.

У меня работает обрезка, и она возвращает обрезанное изображение в виде строки base64. Я расшифровал его и записал в новый файл изображения, чтобы потом его можно было сохранить в базе данных.

Когда он доходит до upload.save (), я получаю сообщение об ошибке.

AttributeError: '_io.BufferedWriter' object has no attribute '_committed'

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

1 Ответ

1 голос
/ 02 марта 2020

Мне удалось найти решение с помощью ContentFile

from django.core.files.base import ContentFile

def upload_image(request):
        if request.is_ajax and request.POST:
        image = request.POST.get('image')

        image_name = request.POST.get('image_name')

        extension = image_name.split('.')[1].lower()

        image_name = '{}_{}_profile_image.{}'.format(request.user.first_name, request.user.last_name, extension)

        imgStr = image.split(';base64')

        data = ContentFile(base64.b64decode(imgStr[1]), name=image_name)

        upload = Upload(
            file=data,
            user = request.user.username
            )
        # Saves upload to S3 bucket
        upload.save()
    data = {

    }
    return JsonResponse(data)

. Преобразует строку base64 в файл, который можно прочитать с помощью django.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...