在JS中创建二进制blob

use*_*456 8 javascript binary hex blob file

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

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

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

Ala*_*mms 6

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

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

也许这更容易理解?我个人认为这更清楚。


Mus*_*usa 5

将您的数据转换为二进制数组,然后从中创建一个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"});
Run Code Online (Sandbox Code Playgroud)

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