将base64转换为.jpg文件,然后保存在Django数据库中

Converting base64 to .jpg file, then saving in Django database

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)

我正在尝试使用 Croppie.js 在 Django 中裁剪图像。然后将图像上传到 S3 存储桶。

我正在裁剪,它返回裁剪为 base64 字符串的图像。我把它解码并写入一个新的图像文件,这样它就可以保存在数据库中。

当它到达 upload.save() 时出现错误。

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

我不确定是什么问题。这是我第一次使用 base64 图像,我不确定我在转换回文件时是否遗漏了什么或发生了什么。

我能够通过使用 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 可读的文件。