通过获取文件流下载文件时无法获取文件名res.headers["content-disposition"]

1,067 阅读1分钟

通常前端通过接口获取文件流下载文件时,是将文件流转二进制流,并且从请求头中res.headers["content-disposition"]获取文件名。

const tempName = res.headers["content-disposition"]
const fileName = tempName 
    .split(";")[1]
    .split("=")[1];


但实际开发中会遇到明明在控制台里可以看到返回头里有该字段,但是就是无法通过js获取的情况:

image.png


这是因为浏览器的CORS对接口的返回头里字段进行了限制
根据MDN文档:Access-Control-Expose-Headers 默认情况下,header只有六种 simple response headers可以暴露给外部,具体可以查看文档,总之Content-Disposition不在其中。
必须在服务端通过设置Access-Control-Expose-Headers将Content-Disposition暴露出来才可以正常在前端获取。
否则就是看得见摸不着的存在。


个人在实践中出现了本地可以获取,但是发到线上无法获取的情况。
推测是我在本地环境起了代理服务,前后端本来就是同源的,没有通过CORS跨域。
有的文章说是大小写不一致的问题,我在chrome浏览器中没有这个问题。这里写出来仅作参考。