我正在生成一个文件客户端,我有十六进制数据,只是想让用户下载生成的文件。在JS中创建二进制blob
var blob = new Blob([hexData], {type: "application/octet-stream"});
console.log(URL.createObjectURL(blob));
生成的文件是一个纯文本文件,它包含ASCII中的十六进制数据。如何强制Blob包含二进制数据而不是文本?
我正在生成一个文件客户端,我有十六进制数据,只是想让用户下载生成的文件。在JS中创建二进制blob
var blob = new Blob([hexData], {type: "application/octet-stream"});
console.log(URL.createObjectURL(blob));
生成的文件是一个纯文本文件,它包含ASCII中的十六进制数据。如何强制Blob包含二进制数据而不是文本?
将您的数据转换为二进制数组,然后从中创建一个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"});
从上面的@所以我不能把功劳穆萨的解决方案得到,但它更清晰写这是比我给他的回答跛脚评论答案。
var byteArray = new Uint8Array(hexdata.match(/.{2}/g)
.map(e => parseInt(e, 16)));
var blob = new Blob([byteArray], {type: "application/octet-stream"});
也许这样比较容易理解?我个人认为它更清楚。
blob第一个参数必须是一个数组''新Blob([byteArray],...);' – Endless 2016-06-17 07:10:24
谢谢。哎呀。固定。 – 2016-06-20 18:53:43
我想建议一个更简单,也许更清洁(旁观者的眼睛)的方式。 '变种的ByteArray =新Uint8Array(hexdata.match(/ {2} /克) .MAP(E => parseInt函数(即,16)));' 此拆分十六进制数据为两个字节大块,将它们解析为十六进制数字,然后将这些数组返回给Uin8Array构造函数。 – 2016-06-16 23:08:08