前端下载二进制流文件

export function downloadAsDocExtranet (url, params, fileName) {

  const downloadInfoMsg = vueMain.$message({

    message: "<div style='color: rgb(36,159,230); width: 600px; word-wrap: break-word'>正在下载文档:" + fileName + ",请您耐心等待......</div>",

    type: "info",

    duration: 0,

    dangerouslyUseHTMLString: true

  });

  getAsBinary(url, params).then(res => {

    downloadInfoMsg.close();

    if (res && res.status === 200 && res.data.size > 0) {

      var blob = new Blob([res.data]);

      if (window.navigator && window.navigator.msSaveBlob) {

        window.navigator.msSaveBlob(blob, fileName);

      } else {

        var href = window.URL.createObjectURL(blob);

        var aElement = document.createElement("a");

        aElement.href = href;

        aElement.target = "_blank";

        aElement.download = fileName;

        document.body.appendChild(aElement);

        aElement.click();

        document.body.removeChild(aElement);

        window.URL.revokeObjectURL(href);

      }

    } else {

      vueMain.$message({ message: "文档(" + fileName + ")获取下载链接失败,请联系管理员!", type: "error", duration: 3000 });

    }

  }).catch((err) => {

    downloadInfoMsg.close();

    vueMain.$message({ message: "文档(" + fileName + ")获取下载链接失败,请联系管理员!", type: "error", duration: 3000 });

    console.log(err);

  });

}

/**

 * 访问后端接口

 * @param url url

 * @param params 请求参数

 * @returns {Promise<unknown>} 响应二进制流

 */

function getAsBinary (url, params) {

  return new Promise((resolve, rejects) => {

    request

      .post(url, qs.stringify(params), { responseType: "blob" })

      .then(res => {

        resolve(res);

      }).catch(err => {

        rejects(err);

      });

  });

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值