【问题标题】:Create binary blob in JS在 JS 中创建二进制 blob
【发布时间】:2014-11-14 22:44:43
【问题描述】:

我在客户端生成一个文件,我有十六进制的数据,只想让用户下载生成的文件。

var blob = new Blob([hexData], {type: "application/octet-stream"});
console.log(URL.createObjectURL(blob));

生成的文件是一个纯文本文件,其中包含 ASCII 格式的十六进制数据。如何强制 Blob 按原样而不是文本包含二进制数据?

【问题讨论】:

    标签: javascript file binary hex blob


    【解决方案1】:

    源自上述@Musa 的解决方案,因此我不能相信,但将其写为答案比我对他的答案的蹩脚评论更清楚。

    var byteArray = new Uint8Array(hexdata.match(/.{2}/g)
                                  .map(e => parseInt(e, 16)));
    var blob = new Blob([byteArray], {type: "application/octet-stream"});
    

    也许这更容易理解?个人觉得比较清楚。

    【讨论】:

    • blob 第一个参数必须是数组new Blob([byteArray], ...);
    • 谢谢。哎呀。固定。
    【解决方案2】:

    将您的数据转换为二进制数组,然后从中创建一个 blob。

    var byteArray = new Uint8Array(hexdata.length/2);
    for (var x = 0; x < byteArray.length; x++){
        byteArray[x] = parseInt(hexdata.substr(x*2,2), 16);
    }
    var blob = new Blob([byteArray], {type: "application/octet-stream"});
    

    http://jsfiddle.net/mowglisanu/15h9o3d5/

    【讨论】:

    • 我想建议一种更简单,也许更清洁(旁观者之眼)的方式。 var byteArray = new Uint8Array(hexdata.match(/.{2}/g) .map(e =&gt; parseInt(e, 16))); 这会将十六进制数据分成两个字节块,将它们作为十六进制解析为数字,然后将这些数组返回给 Uin8Array 构造函数。
    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 2021-02-12
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2017-11-11
    相关资源
    最近更新 更多