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
posted @ 2022-04-19 16:32  小泽沐优声  阅读(231)  评论(4编辑  收藏  举报