base64转文件(blob)遇到的一个问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了base64转文件(blob)遇到的一个问题相关的知识,希望对你有一定的参考价值。
参考技术A 在过程中,发现报错如下:failed to execute 'atob' on 'window': the string to be decoded is not correctly encoded.
在Google后,仍然不能解决,~~o(>_<)o ~~
后来在看atob和btoa的demo时发现base64字符串仅仅是后面的乱七八糟字符串好吗,没有前面的名片。
var str = "Hello World!";
var enc = window.btoa(str);
var dec = window.atob(enc);
var res = "Encoded String: " + enc + "
" + "Decoded String: " + dec;
The result of res will be:
Encoded String: SGVsbG8gV29ybGQh //看这里!!!!
Decoded String: Hello World!
而图片的base64是这样的:
data:image/gif;base64,/9j/4AAQSkZJRgABAQ........
所以只要后面的就可以了:
b64Data.substring(b64Data.indexOf(',') + 1)
base64转换blob函数
function b64toBlob(b64Data, contentType, sliceSize)
前端通过ajax获取base64转blob下载PDF方法
我们通常下载文件的方式无非后端给一个生成文件链接, 前端通过a标签或者iframe的方式去下载,这种方式的弊端是无法监测到文件是否下载完成,无法给用户友好的提示,以避免用户短时间内重复点击下载.
如果我们能用Ajax从后端拿到PDF的相关数据,再在前端下载成PDF就可以解决这个问题,那么新的问题是:
1. 前端如何下载PDF?
2. 后端给什么格式的数据?
针对第一个问题很简单:将通过URL.createObjectURL()函数将blob对象生成url,并添加到a标签上即可解决.
问题转化成后端给什么格式数据我们通过ajax请求获取之后可以转化成blob? base64是一个可行的方案.
具体解决方案如下:
1. 将base64转化成blob方法
1 function convertBase64ToBlob(base64, fileType, slice) { 2 return new Blob(atob(base64) 3 .match(new RegExp(`([\s\S]{${slice}})|([\s\S]{1,${slice}})`, ‘g‘)) 4 .map(function(item){ 5 return new Uint8Array(item.split(‘‘).map(function(s, i) { 6 return item.charCodeAt(i) 7 })) 8 }), {type: fileType}) 9 }
2. 前端下载PDF
1 const blob = convertBase64ToBlob(data, ‘application/pdf‘, 1024) 2 if (navigator.msSaveBlob) { 3 return navigator.msSaveBlob(blob, ‘1.pdf‘); 4 } 5 const urlFromBlob = window.URL.createObjectURL(blob); 6 const a = document.createElement(‘a‘); 7 a.style.display = ‘none‘; 8 a.href = urlFromBlob; 9 a.download = ‘1.pdf‘; 10 document.body.appendChild(a); 11 a.click(); 12 window.URL.revokeObjectURL(urlFromBlob); 13 document.body.removeChild(a)
over !
以上是关于base64转文件(blob)遇到的一个问题的主要内容,如果未能解决你的问题,请参考以下文章
如何下载 Block Blob (Base64) 文件并使用 Azure Blob 存储将其转换为 PNG?
前端js实现 blob转base64位 和 base64位转blob
JS atob btoa方法处理base64数据后转Blob类型实现文字转语音.mp3文件