2017-04-06 35 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值。試試這個,這可能會解決你的問題。

相關問題