2016-03-15 2 views
0

Мне нужно получить правильную двоичную строку (для дальнейших операций) из ввода файла. Я получаю код через FileReader, но код неправильный. В следующем коде я получаю двоичную строку и пытается построить блоб из него: Получение действительного двоичного кода из 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, но это не о аудио-веб-api, это всего лишь пример файла-примера.

Я устал бороться с ним :(Действительно ТНХОМ.

+0

лучше создать что-то вроде скрипки, я думаю, plnkr будет лучше для этого случая, –

+0

я имею в виду, создать рабочий пример –

ответ

0
  1. readAsBinaryString осуждаются не использовать его
  2. строку, которую вы получите от readAsBinaryString не «двоичного» его просто текста бинарной части в том, как создается строка (каждый байт считывается в символ). Используйте readAsArrrayBuffer, если вы хотите, чтобы результат был двоичным.
  3. Вы можете использовать файл для создания URL-адреса объекта (файл instanceof blob === true)
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 увидит, что произошло :) Happened: Получено binary: 杏 卧 Ȁs 導 찥 恜 ጁ 灏 獵 效 摡 ā ༀ  伀 杧 杧 杧 杧 杧 敤 敤 敤 敤 敤 敤 敤 敤 敤 敤 敤 敤 敤 敤 敤 敤 敤r 伀 杧 S 猀 ฀ ɜᴀ 㝚 Í – WennY