2016-03-15 66 views
0

有效二進制我需要從文件輸入獲得正確的二進制字符串(更多操作)。我通過FileReader獲取代碼,但代碼錯誤。在接下來的代碼,我得到的二進制字符串,並試圖從它建立的blob: 獲得從BLOB

function sendBlobToBrowser(blob) 
{ 
    var url = window.URL.createObjectURL(blob); 
    var a = document.createElement("a"); 
    document.body.appendChild(a); 
    a.style = "display: none"; 
    a.href = url; 
    a.download = 'audio.ogg'; 
    a.click(); 
    setTimeout(function() { 
     window.URL.revokeObjectURL(url); 
    }, 100) 
} 

function buildBlobFromString(binaryString) 
{ 
    return new Blob([ binaryString ], { type : 'audio/ogg' }); 
} 

$('#fileInput').change(function() 
{ 
    var file = this.files[ 0 ] 

    var reader = new window.FileReader(); 
    reader.onloadend = function() { 
     var binary = this.result; 

     console.log('Converted string src: ' + binary) 

     // trying to build blob 
     var builtBlob = buildBlobFromString(binary); 
     sendBlobToBrowser(builtBlob) 
    } 
    reader.readAsBinaryString(file); 
}) 

Here就是例子。 對於我正在使用this ogg file的測試,但它不是關於音頻Web API,它只是一些示例文件。

我已經厭倦了與它打:(真的THX。

+0

更好地創造一些像小提琴,我想plnkr將是最適合這種情況下, –

+0

我的意思是,創建工作示例 –

回答

0
  1. readAsBinaryString已被棄用不使用它
  2. readAsBinaryString得到的字符串不是「二進制」它只是文字的二進制部分在字符串是如何創建的(每個字節讀入一個字符)。如果你想要得到的結果是二進制使用readAsArrrayBuffer
  3. 您可以使用一個文件創建一個URL對象(文件的instanceof BLOB ===真)
function sendBlobToBrowser(blob) 
{ 
    var url = window.URL.createObjectURL(blob); 
    var a = document.createElement("a"); 
    document.body.appendChild(a); 
    a.style = "display: none"; 
    a.href = url; 
    a.download = 'audio.ogg'; 
    a.click(); 
    setTimeout(function() { 
     window.URL.revokeObjectURL(url); 
    }, 100); 
} 

$('#fileInput').change(function() 
{ 
    var file = this.files[ 0 ]; 
    sendBlobToBrowser(file);  
}); 
+0

我不需要保存此文件。這只是測試二進制的方式。關鍵詞:*我需要**才能得到正確的二進制字符串(用於進一步操作)***。我有第一篇文章的更新鏈接,請參閱。 – WennY

+0

JavaScript中的字符串是一個16位值的序列,您不能在其中存儲任意的二進制數據。 – Musa

+0

只需更換8至16日在功能和u會看到發生了什麼事:)發生的經過:獲取的二值:杏臥Ȁs導찥恜ጁ灝獵效摡āༀ伀杧小號猀฀S ^ꀀ⺲ĩ優異味條ࡳ刀捥牯敤[R伀杧小號猀฀ɜᴀ㝚Í – WennY