前端对文件流做出导出操作

content-disposition

前后端先约定好返回头部信息content-disposition

在这里插入图片描述


注意处理好返回值,把响应头信息返回

// 以axios为例子
// 返回拦截器
axios.interceptors.response.use(
  (response) => {
    return Object.assign(response.data,{headers:response.headers});
  },
  (error) => {
    throw error;
  }
)

相关方法

// 格式化文件流下载content-disposition的filename值
//headers为请求返回的header
export function formatFileName(headers) {
  const patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
  const contentDisposition = decodeURIComponent(headers['content-disposition'])
  const result = patt.exec(contentDisposition)
  let fileName = result[1]
  fileName = fileName.replace(/\"/g, '')
  return fileName
}

// blob文件下载
//blob为返回文件流;filename为文件名信息
export function download(blob, fileName) {
  if (window.navigator.msSaveOrOpenBlob) {
    navigator.msSaveBlob(blob, fileName)
  } else {
    var link = document.createElement('a')
    link.href = window.URL.createObjectURL(blob)
    link.download = fileName
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
  }
}

方法调用demo

async downloadFile(id) {
      try {
        const res = await fileDownloadFile({ id: id })
        const fileName = formatFileName(res.headers)
        download(res, fileName)
      } catch (error) {}
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值