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

问题描述

我正在尝试将BASE64编码的图像保存在django rest框架中。首先,我们编写代码将base64编码的图像插入imagefield并对其进行测试,然后出现以下错误

binascii.Error:错误的填充

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

serializers.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']

解决方法

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

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

只需发布此信息,以防它适用或帮助出于同样原因的其他人。

,

我有同样的错误。我做了所有事情清除缓存,但它不起作用。现在将浏览器更改为 Mozilla。现在它可以工作了。