1. 后端返回文件流 ,前端下载
接口定义,响应类型必须为 responseType: 'blob',
downLoad(obj) {
return Promise.resolve(
instance.get(obj.url, {
responseType: 'blob',
withCredentials: true
})
)
},
downLoadPost(obj) {
return Promise.resolve(
instance.post(obj.url,obj.data, {
responseType: 'blob',
withCredentials: true
})
)
}
方法1 :URL.createObjectURL 创建文件流地址,写入浏览器地址下载
let objectUrl = URL.createObjectURL(res);
window.location.href = objectUrl;
方法2 : 创建a标签下载
static downloadFile(file, name) {
let link = document.createElement('a')
let blob = new Blob([file], {type: 'application/vnd.ms-excel'})
link.style.display = 'none'
link.href = URL.createObjectURL(blob);
link.download = name //下载的文件名
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
图片地址下载:
static downFile(imgsrc, name) { //下载图片地址和图片名
let image = new Image();
// 解决跨域 Canvas 污染问题
image.setAttribute("crossOrigin", "anonymous");
image.onload = function () {
let canvas = top.document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
let context = canvas.getContext("2d");
context.drawImage(image, 0, 0, image.width, image.height)
let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
let a = top.document.createElement("a"); // 生成一个a元素
let event = new MouseEvent("click"); // 创建一个单击事件
a.download = name || "photo"; // 设置图片名称
a.href = url; // 将生成的URL设置为a.href属性
a.target = '_blank';
a.dispatchEvent(event); // 触发a的单击事件
};
image.src = imgsrc;
image.src = imgsrc + '?v=' + Date.now();
}
文件上传接口:利用表单上传
filePost(obj) {
return Promise.resolve(
instance.post(obj.url, obj.data ? obj.data : {}, {
headers: {
'content-type': 'multipart/form-data'
},
withCredentials: true
})
)
},