<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>base64转文件</title>
</head>
<body>
<form id="submitForm" name="submitForm" method="post">
<div>
<a class="down" href=""></a>
</div>
<textarea rows="50" id="base64" name="base64" cols="100"></textarea>
<br/>
文件格式<select id="fileType" name="fileType">
<option value="pdf">pdf</option>
<option value="png">png</option>
<option value="jpg">jpg</option>
<option value="zip">zip</option>
</select>
<br/>
文件名称<input type="text" name="fileName" id="fileName" />
<br/>
<button onclick="downloadFile()">下载文件 </button>
</form>
</body>
<script>
function myFunction() {
let base64 = 'data:image/png;base64,base64编码图片内容';
function dataURLtoBlob(dataurl) {
var 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 });
}
//调用
let blob = dataURLtoBlob(base64);
let link = document.createElement('a')
link.download = 'abc.png' // 要下载的文件名
link.href = URL.createObjectURL(blob);
// 触发点击
document.body.appendChild(link);
link.click();
// 然后移除
document.body.removeChild(link);
}
/**
* desc: base64对象转blob文件对象
* @param urlData :数据的base64对象
* @param type :类型 png,pdf,doc,mp3等;
* @returns {Blob}:Blob文件对象
*/
function base64ToBlob(urlData, type) {
let arr = urlData.split(',');
let array = arr[0].match(/:(.*?);/);
let mime = (array && array.length > 1 ? array[1] : type) || type;
// 去掉url的头,并转化为byte
let bytes = window.atob(arr[1]);
// 处理异常,将ascii码小于0的转换为大于0
let ab = new ArrayBuffer(bytes.length);
// 生成视图(直接针对内存):8位无符号整数,长度1个字节
let ia = new Uint8Array(ab);
for (let i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob([ab], {
type: mime
});
}
/**
* desc: 下载导出文件
* @param blob :返回数据的blob对象或链接
* @param fileName :下载后文件名标记
* @param fileType :文件类 word(docx) excel(xlsx) ppt等
*/
function downloadExportFile(blob, fileName, fileType) {
let downloadElement = document.createElement('a');
let href = blob;
if (typeof blob == 'string') {
downloadElement.target = '_blank';
} else {
href = window.URL.createObjectURL(blob); //创建下载的链接
}
downloadElement.href = href;
downloadElement.download = fileName + '.' + fileType; //下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click(); //触发点击下载
document.body.removeChild(downloadElement); //下载完成移除元素
if (typeof blob != 'string') {
window.URL.revokeObjectURL(href); //释放掉blob对象
}
}
/**
* desc: base64转文件并下载
* @param base64 {String} : base64数据
* @param fileType {String} : 要导出的文件类型png,pdf,doc,mp3等
* @param fileName {String} : 文件名
*/
function downloadFile(base64, fileName, fileType) {
let typeHeader = 'data:application/' + fileType + ';base64,' // 定义base64 头部文件类型
let converedBase64 = typeHeader + base64; // 拼接最终的base64
let blob = base64ToBlob(converedBase64, fileType) // 转成blob对象
downloadExportFile(blob, fileName, fileType) // 下载文件
}
/**
*/
function downloadFile() {
var base64 = document.getElementById("base64").value;
var fileName = document.getElementById("fileName").value;
var fileType = document.getElementById("fileType").value;
downloadFile(base64,fileName,fileType);
}
</script>
</html>
前端base64转换工具(base64转文件,base64转图片)
于 2022-06-05 10:12:37 首次发布