post请求下载Excel(通过Blob对象)

const exportExtension = (data) => {
  return http({
    method: 'post',
    url: '/vsts/ui/v1/channelExtension/export',
    data,
    responseType: 'blob'
  })
}

download(name, blob) {
  try {
    const urlObject = window.URL || window.webkitURL
    const link = document.createElement('a')
    link.href = urlObject.createObjectURL(blob)
    link.download = name
    link.click()
  } catch (err) {
    console.log(err)
  }
},

exportExtension({
  regionId: this.regionId,
  cascade: this.cascade,
  ...params,
}).then(res => {
  console.log(res)
  if (res && res.data) {
    const contentDisposition = res.headers['content-disposition']
    // Content-Disposition 响应头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地
    if (contentDisposition && contentDisposition.includes('attachment')) {
      let filename
      if (contentDisposition.includes('filename')) {
        filename = decodeURI(contentDisposition.split(';')[1].replace('filename=', '')) // decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码
      } else {
        filename = new Date().getTime()
      }
      if (window.navigator.msSaveOrOpenBlob) {
        // 兼容IE浏览器
        window.navigator.msSaveOrOpenBlob(res.data, filename)
      } else {
        this.download(filename, new Blob([res.data], { type: '' }))
      }
    }
  }
})

你可能感兴趣的:(javascript,css,前端)