axios下载文件

若是响应直接就是文件流

axios({
  method: "get",   //根据接口来
  url: url + "?" + params,  //参数正常设置即可,我这里是因为参数设置了list,拼接有点问题就自定义了
  headers: {
    // token: _this.Token,
    //"Content-Type": "application/octet-stream;charset=UTF-8",
  },
  responseType: 'blob'   //一定要设置响应格式,否则下载的文件会打开失败
}).then(function (res) {

  let blob = new Blob([res.data]);
  let url = window.URL.createObjectURL(blob); // 创建 url 并指向 blob
  let a = document.createElement('a');
  a.href = url;
  //获取文件名(不一定能拿到,拿不到就要自定义了)
  let fileNameEncode = res.headers['content-disposition'] && res.headers['content-disposition'].indexOf('filename=') !== -1 ? res.headers['content-disposition'].split('filename=')[1] : null;
  a.download = fileNameEncode ? fileNameEncode : 'FlyRecord.zip';
  a.click();
  window.URL.revokeObjectURL(url); // 释放该 url
}).catch(function (error) {
  console.log(error);
});

注意:请求信息中一定要设置responseType: 'blob',否则下载的文件会打开失败

你可能感兴趣的:(vue,axios,前端)