1. 程式人生 > 其它 >Base64轉Blob下載 中文亂碼

Base64轉Blob下載 中文亂碼

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, pdf
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