vue封装通用下载方法
vue封装通用下载方法
? 最近借助 vue
和 ElemenUI
在项目中写下载时,用的是 window.open
location.href
,但是页面总会跳转并且显示找不到,不会进行下载,之后重新封装了一种方法,不过是找大佬帮忙的,最核心的代码我到现在还没看明白,但记录下来总归是没错的φ(>ω<*)
下载方法封装
下载方法需要封装在
request.js
中。
// 通用下载方法
export function download(url, params, filename) {
console.log(11111)
downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
return service.post(url, params, {
transformRequest: [(params) => { return tansParams(params) }],
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
responseType: 'blob'
}).then(data => {
console.log("下载2")
const isLogin = blobValidate(data);
if (isLogin) {
const blob = new Blob([data])
saveAs(blob, filename)
} else {
const resText = data.text();
const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
Message.error(errMsg);
}
downloadLoadingInstance.close();
}).catch((r) => {
console.error(r)
Message.error('下载文件出现错误,请联系管理员!')
downloadLoadingInstance.close();
})
}
全局注册
这里的内容需要写在
main.js
中。
// main.js
import { download } from "@/utils/request"; // 全局引入
Vue.prototype.download = download // 全局注册
页面使用
在自己需要的页面中写下载方法。
// 下载
down() {
this.download('/download', { // 这里是后台给的下载路径
...this.query // 下载时传入的参数
}, `voucher_template_${new Date().getTime()}.xlsx`) // 下载的文件名和后缀名
},