Vue3下载图片,Pdf,Excel
图片编码
1.准备图片Base64编码
具体代码
//下载
function downClcik(row) {
if (/\.pdf$/.test(row.name)) {
// PDF 文件 base64 数据
let base64Pdf = row.url;
// 检查并去掉 Base64 的前缀部分(如果存在)
if (base64Pdf.startsWith("data:")) {
base64Pdf = base64Pdf.split(",")[1];
}
try {
// 将 base64 转换为二进制数据
const binaryString = window.atob(base64Pdf);
const len = binaryString.length;
const bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
// 创建 Blob 对象,MIME 类型为 PDF
const blob = new Blob([bytes], { type: "application/pdf" });
// 创建下载链接
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = row.name || "default-file.pdf"; // PDF 文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
} catch (error) {
console.error("Error decoding base64 string: ", error);
}
}
if (/\.xlsx?$/.test(row.name)) {
// Excel 文件 base64 数据
let base64Excel = row.imgStr;
// 检查并去掉 Base64 的前缀部分(如果存在)
if (base64Excel.startsWith("data:")) {
base64Excel = base64Excel.split(",")[1];
}
try {
// 将 base64 转换为二进制数据
const binaryString = window.atob(base64Excel);
const len = binaryString.length;
const bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
// 创建 Blob 对象
const blob = new Blob([bytes], {
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
});
// 创建下载链接
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = row.fileName || "default-file.xlsx";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
} catch (error) {
console.error("Error decoding base64 string: ", error);
}
} else {
//图片下载
const link = document.createElement("a");
link.href = row.url;
link.download = row.name;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}