【问题标题】:Blob from javascript binary string来自 javascript 二进制字符串的 Blob
【发布时间】:2015-03-04 19:10:39
【问题描述】:

我有一个用FileReader.readAsBinaryString(blob).创建的二进制字符串

我想用这个二进制字符串中表示的二进制数据创建一个 Blob。

【问题讨论】:

标签: javascript string binary blob


【解决方案1】:

您使用的 blob 是否不再可用?
你必须使用readAsBinaryString吗?你能改用readAsArrayBuffer吗?使用数组缓冲区,重新创建 blob 会容易得多。

如果不是,您可以通过循环遍历字符串并构建一个字节数组然后从中创建一个 blob 来重建 blob。

$('input').change(function(){
    var frb = new FileReader();
    frb.onload = function(){
        var i, l, d, array;
        d = this.result;
        l = d.length;
        array = new Uint8Array(l);
        for (var i = 0; i < l; i++){
            array[i] = d.charCodeAt(i);
        }
        var b = new Blob([array], {type: 'application/octet-stream'});
        window.location.href = URL.createObjectURL(b);
    };
    frb.readAsBinaryString(this.files[0]);
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="file">

【讨论】:

  • 是的,这对我有用。我已经用对我有用的代码编辑了你的答案。与我最初的问题的一个不同之处在于,在这种情况下,binaryString 来自使用 node.js 方法 fs.readFileSync(path, "binary") 的文件。
  • 这对我很有用!我只需要改变一件事——我不能直接在 Blob 构造函数中使用 Uint8Array,而是必须传递 new Blob([array.buffer]),否则 Blob 的内容就是序列化的 Uint8Array。
猜你喜欢
  • 2016-02-10
  • 2014-01-14
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 2012-02-15
  • 2013-04-15
  • 1970-01-01
  • 2011-07-11
相关资源
最近更新 更多