根据base64下载 PDF/EXCEL/doc/ppt/图片等文件(可下载多种格式的文件)
/**
* 根据base64下载PDF/EXCEL/doc/ppt/图片等文件
* @param {*} blob 文件base64编码
* @param {*} fileName 文件名
* @param {*} fileType 文件类型
*/
export function downloadByBase64(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对象
}
}
//用法
import {downloadByBase64} from '@/utils/common';
if (window.navigator.msSaveBlob) {
//兼容IE浏览器
try {
let blobObject = new Blob([file]);
window.navigator.msSaveOrOpenBlob(blobObject, `文件名.xlsx`);
} catch (e) {}
} else {
downloadByBase64(file, `文件名`, type);
}
根据url下载 PDF/EXCEL/doc/ppt图片等文件(可下载多种格式的文件)
/**
* 根据url下载PDF/EXCEL/doc/ppt/图片等文件
* @param {*} url 下载链接
* @param {*} fileName 文件名
*/
export function downloadByUrl(url, fileName){
const urlStr = url.replace(/\\/g, "/");
const xhr = new XMLHttpRequest();
xhr.open("GET", urlStr, true);
xhr.responseType = "blob";
xhr.onload = () => {
if (xhr.status === 200) {
saveAs(xhr.response, fileName);
}
};
xhr.send();
}
根据二进制流下载PDF/EXCEL/doc/ppt/图片等文件
/**
* 根据二进制流下载PDF/EXCEL/doc/ppt/图片等文件
* @param {*} flow 二进制流
* @param {*} fileName 文件名
* @param {*} fileType 文件类型
*/
export function downloadByFlow(flow, fileName, fileType) {
const fileTypeList = {
excel: ['application/vnd.ms-excel', '.xlsx'],
pdf: ['application/pdf', '.pdf'],
png: ['image/png', '.png'],
jpg: ['image/jpeg', '.jpg']
},
type = fileTypeList[fileType][0],
suffix = fileTypeList[fileType][1];
const blob = new Blob([flow], {type: type});
// for IE
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
const name = fileName + suffix; //name + '.xlsx';
window.navigator.msSaveOrOpenBlob(blob, name);
} else {
// for Non-IE (chrome, firefox etc.)
const name = fileName + suffix;
const elink = document.createElement('a');
elink.download = name;
elink.style.display = 'none';
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href);
document.body.removeChild(elink);
}
}
小插曲:根据二进制流下载文件,下载后文件打不开
解决方案:相应类型设置为 arraybuffer