binascii.Error:python django 中的填充不正确

lee*_*ngo 2 python django base64

我正在尝试将 base64 编码的图像保存在 django rest 框架中。首先我们编写一段代码,将base64编码的图片插入到imagefield中进行测试,出现如下错误。

binascii.Error:不正确的填充

我不明白的是,我之前使用过相同的代码并且没有出现这样的错误。你能帮助我吗?这是我的代码。

序列化程序.py

from rest_framework import serializers
from .models import post, comment

class Base64ImageField (serializers.ImageField) :

    def to_internal_value (self, data) :
        from django.core.files.base import ContentFile
        import base64
        import six
        import uuid

        if isinstance(data, six.string_types):
            if 'data:' in data and ';base64,' in data :
                header, data = data.split(';base64,')

            try :
                decoded_file = base64.b64decode(data)
            except TypeError :
                self.fail('invalid_image')

            file_name = str(uuid.uuid4())[:12]
            file_extension = self.get_file_extension(file_name, decoded_file)
            complete_file_name = "%s.%s" % (file_name, file_extension, )
            data = ContentFile(decoded_file, name=complete_file_name)

        return super(Base64ImageField, self).to_internal_value(data)

    def get_file_extension (self, file_name, decoded_file) :
        import imghdr

        extension = imghdr.what(file_name, decoded_file)
        extension = "jpg" if extension == "jpeg" else extension

        return extension

class commentSerializer (serializers.ModelSerializer) :

    class Meta :
        model = comment
        fields = '__all__'

class postSerializer (serializers.ModelSerializer) :
    author = serializers.CharField(source='author.username', read_only=True)
    image1 = Base64ImageField(use_url=True)
    image2 = Base64ImageField(use_url=True)
    image3 = Base64ImageField(use_url=True)
    image4 = Base64ImageField(use_url=True)
    image5 = Base64ImageField(use_url=True)
    comment = commentSerializer(many=True, read_only=True)

    class Meta:
        model = post
        fields = ['pk', 'author', 'title', 'text', 'image1', 'image2', 'image3', 'image4', 'image5', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5', 'comment']
Run Code Online (Sandbox Code Playgroud)

小智 10

在 shell 中运行以下命令

from django.contrib.sessions.models import Session
Session.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)

更多信息请访问https://code.djangoproject.com/ticket/31592


Pet*_*son 9

我不确定这是否适用于您的情况,具体取决于您存储编码数据的位置。

我有同样的错误,但它与一些编码的会话数据有关。我清除了浏览器 Devtools 中的会话数据(cookies、缓存等),它解决了我的问题。

只是张贴这个以防万一它适用或帮助其他出于同样原因的人。

  • 天哪,对我来说,我必须清除浏览器缓存/cookie,错误就消失了。谢谢 (3认同)