从blob获取有效的二进制文件

时间:2016-03-15 10:20:44

标签: javascript binary blob filereader

我需要从文件输入中获取正确的二进制字符串(用于进一步操作)。我通过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 );
})

https://github.com/dimka665/awesome-slugify/issues/24就是一个例子。 对于我使用Here的测试,但它不是关于audio web api,它只是一些示例文件。

我已经厌倦了与它抗争:(真的是thx。

1 个答案:

答案 0 :(得分:0)

  1. readAsBinaryString已弃用,请勿使用
  2. readAsBinaryString获得的字符串不是“二进制”,它只是文本的二进制部分是如何创建字符串(每个字节被读入一个字符)。如果您希望结果为二进制,请使用readAsArrrayBuffer
  3. 您可以使用文件创建对象URL(文件instanceof blob === true)
  4. 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 );    
    });