赞
踩
用 axios 发送请求下载文件请求后端会出现以下问题,返回的是二进制流格式,如图所示:
比较纳闷,后来网上查了各种资料才知道,前端需要 blob 就可以将二进制流文件下载到本地了。
application/vnd.openxmlformats-officedocument.wordprocessingml.document
, 也可以是二进制流的application/actet-stream
,但是我在项目中并没有指定,也是可以的。上面步骤三的操作,从响应头里 content-disposition
属性可以获取到文件名,下面代码也给出了解决方案,当然前提是后端接口是要设置这个属性的。
axios({ method: 'post', data: parameter, url: `/download`, headers: { 'Content-Type': 'application/json', }, responseType: 'blob' }).then(res => { let blob = new Blob([res.data]) let contentDisposition = res.headers['content-disposition'] let pattern = new RegExp('filename=([^;]+\\.[^\\.;]+);*') let result = pattern.exec(contentDisposition) // 使用decodeURI对名字进行解码 let fileName = decodeURI(result[1]) let downloadElement = document.createElement('a') // 创建下载的链接 let href = window.URL.createObjectURL(blob) downloadElement.style.display = 'none' downloadElement.href = href // 下载后文件名 downloadElement.download = fileName document.body.appendChild(downloadElement) // 点击下载 downloadElement.click() // 下载完成移除元素 document.body.removeChild(downloadElement) // 释放掉blob对象 window.URL.revokeObjectURL(href) }).catch(err => { console.log('下载失败') })
https://blog.csdn.net/kebi99/article/details/109806643
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。