【发布时间】:2018-12-21 12:57:15
【问题描述】:
我正在使用它来对图像文件进行 base64 编码:
fileToBase64 = (filename, filepath) => {
return new Promise(resolve => {
var file = new File([filename], filepath);
var reader = new FileReader();
reader.onload = function(event) {
resolve(event.target.result);
};
reader.readAsDataURL(file);
});
};
这会被调用:
handleChangeFile = event => {
const { name, files } = event.target;
if (files.length) {
const file = files[0];
let fields = this.state.fields;
this.fileToBase64(file).then(result => {
fields[name].value = result;
});
fields[name].isFilled = true;
this.setState({
fields: fields
});
}
};
整个 fields 变量被发布到 django 服务器,到目前为止没有问题。
在python django端:
str_encoded = request.data["file"]
str_decoded = base64.b64decode(str_encoded)
第二行返回错误binascii.Error: Invalid base64-encoded string: length cannot be 1 more than a multiple of 4。我用谷歌搜索并读到这可能是一个填充问题,但我不知道如何解决它。
【问题讨论】:
-
确保在 js base64 字符串中的前缀代码在 python 中处理相同的字符串之前被删除。像那样的东西就是问题
-
@NikosM。它以此开头:data:application/octet-stream;base64,/9j/4AAQSkZJR。所以我需要删除最多并包括base64,?
-
是的,我认为这是问题
-
也包括斜线
-
@NikosM。和 /9j/?
标签: javascript python django base64