的Python / Django的失败在编码为由JavaScript BASE64解码文件(Pyth

2019-10-30 04:02发布

我使用这个,在反应,以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
      });
    }
  };

而整个字段变量被迄今为止发布到Django的服务器,没有问题。

蟒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 。 我GOOGLE和阅读这可能是一个填充问题,但我不知道如何解决它。

Answer 1:

你将不得不剥离base64通过添加前缀字符串javascript 。 前缀是某物像data:{type};base64,{actual-base64-string-follows}

在PHP中,在那里我有同样的问题,我测试了,如果字符串开头"data:"前缀和我从字符串,最多的位置开始剥离它; (分号)加上8个字符(赶上最后的 “; BASE64,”)。

然后你可以使用Python来解码base64字符串剩下的,因为它现在是一个有效base64字符串。



文章来源: Python / Django fails at decoding file encoded as base64 by javascript