问题描述
我正在尝试将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。现在它可以工作了。