Base64轉Blob下載 中文亂碼
阿新 • • 發佈:2022-04-19
Base64轉Blob下載
Base64轉成Blob
- Base64通過此方法轉成Blob
- dataurl有字首,字首可參考最下面的表格
/** * @param {String} dataurl 傳進來的要有檔案格式 * @return {Blob} 返回Blob * */ function dataURLtoBlob(dataurl) { let arr = dataurl.split(","), mime = arr[0].match(/:(.*?);/)[1], //沒有檔案格式此處會報錯 bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], { type: mime }); <!-- UTF-8 亂碼可加上 --> return new Blob([u8arr], { type: `${mime},charset=UTF-8` }); }
下載
- 把轉好的Blob以引數觸發此函式下載
/** * @param {Blob} blob * */ function down(blob) { const a = document.createElement('a'); //建立a標籤 a.setAttribute('download', ''); // 名字 a.setAttribute('href', window.URL.createObjectURL(blob)); // href連結 a.click(); // 自執行點選事件 document.body.appendChild(a); //插入body裡 document.body.removeChild(a); //從body刪除 }
亂碼問題
- 大多數都是格式不對
- Base64 字首問題(格式問題),這裡是常用的格式。
序列 | 字首 | 適用格式 |
---|---|---|
1 | data:application/pdf;base64, | |
2 | data:image/png;base64, | png |
3 | data:application/x-zip-compressed;base64, | zip |
4 | data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64, | docx |
5 | data:application/json;base64, | json |
6 | data:application/vnd.ms-excel;base64, | xls |
7 | data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64, | xlsx |
8 | data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64, | pptx |
9 | data:text/plain;base64, | txt |
10 | data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64, | pptx |
11 | data:application/msword;base64, | doc |