2017-04-06 1731 views
0

无法将base64转换为blob。我有函数定义如下:'Window'上的'atob'错误:要解码的字符串编码不正确

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.

在编码什么的字符串根据错误情况?

+0

为什么地球上你会创建一个文件blob?一个文件是一个blob的实例。摆脱洞FileReader和b64toBlob的事情,只需在文件上调用createObjectURL。 – Endless

回答

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值。试试这个,这可能会解决你的问题。