在JS中创建二进制blob

时间:2014-09-20 13:11:39

标签: javascript file binary hex blob

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

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

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

2 个答案:

答案 0 :(得分:4)

从上面的@Musa解决方案中得出,所以我不能赊道,但是把它作为答案而不是我对他的回答的蹩脚评论更清楚。

<div class="parent">
  <div class="less-important">Truncate this text because it is less important</div>
  <div class="more-important">The important text</div>
</div>

<div class="parent">
  <div class="less-important">No ellipsis</div>
  <div class="more-important">Important stuff</div>
</div>

<div class="parent">
  <div class="less-important">Less important content</div>
  <div class="more-important">Way more important info that will cause ellipsis</div>
</div>

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

答案 1 :(得分:3)

将数据转换为二进制数组,然后从中创建一个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/