在vue项目中,有时候需要实现文件下载,但因为部分后端接口写法原因,并不适用a链接或window.open直接下载文件,优化方法如下:
downfile(uuid,fileName){ // window.open('/api3/file/disk/'+uuid) // 如: https://www.abc.com/api3/file/disk/7766222 这样的链接 let a = document.createElement('a') a.href = process.env.VUE_APP_API_BASE_URL+'/file/disk/'+uuid a.download = fileName a.click() a.remove() }
如果后端是直接输出的文件内容,还可以这样写:
const url = URL.createObjectURL(new Blob([res])) const a = document.createElement('a') a.href = url a.download = `文件_${Date.now()}.docx` a.click() a.remove()
当然,请求的时候,需要设置返回类型为blob,也就是增加一个 responseType: 'blob' 参数。