'Window'错误'atob':要解码的字符串未正确编码

时间:2017-04-06 22:52:00

标签: javascript

无法将base64转换为blob。我的函数定义如下:

function b64toBlob(b64Data, contentType, sliceSize) {
    contentType = contentType || '';
    sliceSize = sliceSize || 512;
    var byteCharacters = atob(b64Data);
    var byteArrays = [];

    for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
      var slice = byteCharacters.slice(offset, offset + sliceSize);

      var byteNumbers = new Array(slice.length);
      for (var i = 0; i < slice.length; i++) {
        byteNumbers[i] = slice.charCodeAt(i);
      }

      var byteArray = new Uint8Array(byteNumbers);

      byteArrays.push(byteArray);
    }

    var blob = new Blob(byteArrays, {type: contentType});
    return blob;
}

我在输入元素onchange()上调用上面的函数:

previewFile(e){

    var previewImage = self.root.querySelector("#previewImage");
    var file = self.root.querySelector('input[type=file]').files[0];
    var reader  = new FileReader();

    if(file){
        reader.readAsDataURL(file);
    } else {
        previewImage.src = "";
    }

    reader.onloadend = function(){
        var blob = self.b64toBlob(reader.result);
        var blobUrl = URL.createObjectURL(blob);
        previewImage.src = blobUrl;
    }
}

我收到这样的错误:Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.

根据错误在案例中编码的字符串是什么?

1 个答案:

答案 0 :(得分:0)

您是否检查过base64数据,因为这可能是一个原因,请尝试此操作。

   `let reader = new FileReader();
    reader.onloadend = (e) => {
    this.base64Data = reader.result;
    console.log('before the change', this.base64Data);
    }
    reader.readAsDataURL(event.target.files[0]);`

这将为您提供准确的base64值。试试这个,这可能会解决你的问题。