Vue Axios 请求api post方式 下载文件

特别说明:请求时参数的配置,请结合不同框架的配置,随机应变(例:isReturnNativeResponse: true),封装方式不同,使用不同!

封装的api

// post
export const indicatorTempDown = (params) =>
  defHttp.post(
    {
      url: Api.enterprisePageExport,
      params,
      // headers: { Authorization: '***' },
      responseType: 'blob',
    },
     // 不可缺少(框架自定义属性)(是否返回本机响应头 例如:当你需要获取响应头时使用这个属性)
    { isReturnNativeResponse: true },
  );

// get
export const indicatorTempDown = () =>
  defHttp.get(
    { url: Api.indicatorTempDown, responseType: 'blob' },
    // 不可缺少(框架自定义属性)(是否返回本机响应头 例如:当你需要获取响应头时使用这个属性)
    { isReturnNativeResponse: true },
  );

局部逻辑

async function downModel() {
  let res = await indicatorTempDown();
  // 调用下载方法
  downloadByData(res.data, '模板.xlsx');
}

实际调用的文件流下载

/**
 * Download according to the background interface file stream
 * @param {*} data
 * @param {*} filename
 * @param {*} mime
 * @param {*} bom
 */
export function downloadByData(data: BlobPart, filename: string, mime?: string, bom?: BlobPart) {
  const blobData = typeof bom !== 'undefined' ? [bom, data] : [data];
  const blob = new Blob(blobData, { type: mime || 'application/octet-stream' });

  const blobURL = window.URL.createObjectURL(blob);
  const tempLink = document.createElement('a');
  tempLink.style.display = 'none';
  tempLink.href = blobURL;
  tempLink.setAttribute('download', filename);
  if (typeof tempLink.download === 'undefined') {
    tempLink.setAttribute('target', '_blank');
  }
  document.body.appendChild(tempLink);
  tempLink.click();
  document.body.removeChild(tempLink);
  window.URL.revokeObjectURL(blobURL);
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值