axios post请求 Content-Type:application/octet-stream 下载文件乱码

发布于 2022-09-12 01:28:35 字数 996 浏览 19 评论 0

`

 download() {
  let params = Object.assign({}, this.form);
  let config = {
    headers: {
      "Content-Type": "application/octet-stream"
    }
  };
  this.$axios
    .post(`url`, params, config, {
      responseType: 'blob',
    })
    .then(res => {
      // 处理返回的文件流
      const content = res;
      const blob = new Blob([content]);
      const fileName = "测试表格123.xls";
      if ("download" in document.createElement("a")) {
        // 非IE下载
        const elink = document.createElement("a");
        elink.download = fileName;
        elink.style.display = "none";
        elink.href = URL.createObjectURL(blob);
        document.body.appendChild(elink);
        elink.click();
        URL.revokeObjectURL(elink.href); // 释放URL 对象
        document.body.removeChild(elink);
      } else {
        // IE10+下载
        navigator.msSaveBlob(blob, fileName);
      }
    });
},

`
出现乱码
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

-残月青衣踏尘吟 2022-09-19 01:28:35

解决了

原来是axios中 参数顺序的问题 踩坑!

长发绾君心 2022-09-19 01:28:35

看起来少侠这里对contentType可能理解错了,content只是告诉后端,请求发过去,我这个请求的主体是个什么格式,你按这个方式来读取,可能是json(默认),可能是formData。

至于返回值,你已经设置了responseType了,那么返回回来就已经是一个Blob了,为啥还要new Blob呢?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文