为什么更新Django base64图像文件上传错误base64编码字符串无效



嘿,当我尝试使用POST方法添加上传图像时,我使用base64函数在Django服务器中上传图像,它的前端工作良好,但当我尝试更新并使用PUT方法时,图像通过错误invalid nbas64-encoded string: a number of data character can not be 1 more than a multiple of 4。因此,如何解决此问题,下面是我的base64代码。

class Base64ImageField(serializers.ImageField):
def to_internal_value(self, data):
if isinstance(data, six.string_types):
if 'data:' in data and ';base64,' in data:
header, data = data.split(';base64,')
ext = format.split('/')[-1] 
try:
# data = data.partition(",")[2]
decoded_file = base64.urlsafe_b64decode(
data + '=' * (-len(data) % 4))
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 CarPhotoSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
file = Base64ImageField(
max_length=None,
use_url=True,
required=False,
allow_null=True,
allow_empty_file=True
)

该错误只是表示您的base64编码不正确。编码流将每3个输入字节转换为4个ASCII字符,您的错误表明您的输入一定是格式错误的,即它试图解码不是3字节倍数的内容。

要确定这是否只是一个与Django相关的错误,请尝试此处的步骤,以确保图像可以在base64中进行编码。您还应该尝试在incognito模式下运行此程序,以确保不存在会话cookie干扰。如果有帮助的话,你甚至可以尝试清除你的cookie。

您是否也考虑了padding?这可能会有所帮助-无法在python 中使用base64编码的数据

最新更新