这个是针对后端返回 url下载地址的
export function matchType(fileName) {
var suffix = '';
var result = '';
try {
var flieArr = fileName.split('.');
suffix = flieArr[flieArr.length - 1];
} catch (err) {
suffix = '';
}
if (!suffix) {
result = false;
return result;
}
var imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif'];
result = imglist.some(function (item) {
return item == suffix;
});
if (result) {
result = 'image';
return result;
};
var txtlist = ['txt'];
result = txtlist.some(function (item) {
return item == suffix;
});
if (result) {
result = 'txt';
return result;
};
var excelist = ['xls', 'xlsx'];
result = excelist.some(function (item) {
return item == suffix;
});
if (result) {
result = 'excel';
return result;
};
var wordlist = ['doc', 'docx'];
result = wordlist.some(function (item) {
return item == suffix;
});
if (result) {
result = 'word';
return result;
};
var pdflist = ['pdf'];
result = pdflist.some(function (item) {
return item == suffix;
});
if (result) {
result = 'pdf';
return result;
};
var pptlist = ['ppt'];
result = pptlist.some(function (item) {
return item == suffix;
});
if (result) {
result = 'ppt';
return result;
};
var videolist = ['mp4', 'm2v', 'mkv'];
result = videolist.some(function (item) {
return item == suffix;
});
if (result) {
result = 'video';
return result;
};
var radiolist = ['mp3', 'wav', 'wmv'];
result = radiolist.some(function (item) {
return item == suffix;
});
if (result) {
result = 'radio';
return result;
}
result = 'other';
return result;
}
import { matchType } from '*****文件'
downloadRes(val) {
let type = matchType(val.fujian);
if (type == 'pdf' || type == 'video') {
window.open(`${val.fujian}`, '_blank');
} else {
console.log('执行了这个');
const loading = this.$loading({
lock: true,
text: '文件准备中。。。',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
let name = "附件";
fetch(val.fujian)
.then((response) => response.blob())
.then((blob) => {
loading.close();
const blobUrl = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = blobUrl;
a.download = name;
a.click();
URL.revokeObjectURL(blobUrl);
})
.catch((error) => {
loading.close();
this.$notify.error({
title: "提示",
message: '文件暂时不能下载',
});
console.error("文件下载失败:", error);
})
}
},
这个是针对后端返回文件流的
import axios from "axios";
const instance = axios.create({
baseURL: "ht1:9527",
});
instance.interceptors.request.use(
(config) => {
NProgress.start();
return config;
},
(error) => {
return Promise.reject(error);
}
);
instance.interceptors.response.use(
(response) => {
const data = response;
return data;
},
(error) => {
return Promise.reject(error);
}
);
export default instance;
import axios from "../utile/XiaZaiAxios";
export function AddExpensePdfStyle(data) {
return axios({
url: `/Jcrl/ExpensesClaimSheet/AddExpensePdfStyle`,
method: "GET",
params: { ...data },
responseType: 'blob',
});
}
async handleCommand(row, val) {
console.log(row, '选择的', val);
let obj = {
tbxcode: row.tbxcode,
style: val
}
let response = await AddExpensePdfStyle(obj)
console.log('打印返回', response);
if (response.data.type == "application/problem+json") {
this.$notify.error({
title: "错误",
position: "top-left",
message: '下载失败',
});
return
}
let filename = 'file';
if (response.headers['content-disposition']) {
const contentDisposition = response.headers['content-disposition'];
const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
const matches = filenameRegex.exec(contentDisposition);
if (matches != null && matches[1]) {
filename = matches[1].replace(/['"]/g, '');
}
}
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
},
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b3bdf9db2d644a239be3e9992ab2c8b2.png#pic_center)