在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' 参数。