我正在生成一個文件客戶端,我有十六進制數據,只是想讓用戶下載生成的文件。在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