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

Javascript 从blob获取有效的二进制文件,javascript,binary,blob,filereader,Javascript,Binary,Blob,Filereader,我需要从文件输入中获得正确的二进制字符串(用于进一步的操作)。我正在通过FileReader获取代码,但代码是错误的。在下一段代码中,我将获取二进制字符串并尝试从中构建blob: 这就是一个例子。 对于我正在使用的测试,但它不是关于音频web api的,它只是一些示例文件 我已经厌倦了和它斗争:(真的,谢谢 readAsBinaryString已弃用,请勿使用 从readasarrystring获取的字符串不是“二进制”的,它只是文本。二进制部分在于如何创建字符串(每个字节都读入一个字符)。如

我需要从文件输入中获得正确的二进制字符串(用于进一步的操作)。我正在通过FileReader获取代码,但代码是错误的。在下一段代码中,我将获取二进制字符串并尝试从中构建blob:

这就是一个例子。 对于我正在使用的测试,但它不是关于音频web api的,它只是一些示例文件

我已经厌倦了和它斗争:(真的,谢谢

  • readAsBinaryString
    已弃用,请勿使用
  • readasarrystring
    获取的字符串不是“二进制”的,它只是文本。二进制部分在于如何创建字符串(每个字节都读入一个字符)。如果希望结果是二进制的,请使用
    readasarraybuffer
  • 您可以使用文件来创建对象Url(blob的文件实例===true)

  • 最好是创建像fiddle这样的东西,我认为plnkr最适合这种情况,我的意思是,创建工作示例我不需要保存这个文件。这只是测试二进制的方法。关键短语:我需要获得正确的二进制字符串(用于进一步的操作)。我在第一篇文章中有更新链接,请看。JavaScript中的字符串是16位值的序列,您不能在其中存储任意二进制数据。只需将函数中的8替换为16,您将看到发生了什么:)发生了什么:获得了二进制:杏卧Ȁs導찥恜ጁ灏獵效摡āༀ伀杧s猀฀Ŝꀀ⺲ĩ优異味条ࡳ刀捥牯敤R伀杧s猀฀ɜᴀ㝚Í一些日本消息而不是二进制:(我不知道那是什么意思。你到底想用这个字符串做什么?
    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 );
    })
    
    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 );    
    });