请求下载二进制流文件需要注意的点

问题

之前在工作中碰到个需求:前端点击按钮发送请求,后端返回 excel 文件的二进制流,并实现下载。

数据是请求成功了,但我在实现过程中碰到了以下两个问题:

  1. 下载的 excel 文件都是乱码
  2. 浏览器控制台中能看到该请求的 Content-Disposition 响应头,但我在代码中无法获取到它,这样就无法得到 excel 的文件名了

解决方法

  1. 发送请求的时候一定要加上 responseType = 'arraybuffer',这样才能接收并解析二进制字节流的数据
  2. 这个问题需要在后端设置:在响应头上要加上 Access-Control-Expose-Headers:Content-Disposition,这样浏览器才能让你获取到 Content-Disposition 响应头