zoukankan      html  css  js  c++  java
  • 前端下载二进制流数据

    这里以axios请求演示:

     axios({
            url: url,
            method: 'get',
            params: parameter,
            headers: signHeader,
            //指定返回的数据类型
            responseType: 'arraybuffer',
          }).then(res=>{
            //application/vnd.openxmlformats-officedocument.wordprocessingml.document 》》》docx类型
            var blob = new Blob([res],
              {type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'});
            var downloadElement = document.createElement('a');
            //创建下载的链接
            var href = window.URL.createObjectURL(blob);
            downloadElement.href = href;
            //下载后文件名
            downloadElement.download = 'hh.docx';
            document.body.appendChild(downloadElement);
            //点击下载
            downloadElement.click();
            //下载完成移除元素
            document.body.removeChild(downloadElement);
            //释放掉blob对象
            window.URL.revokeObjectURL(href);
            //加载loading
            this.downloadLoading = false;
          })
        }

    说明:application/vnd.openxmlformats-officedocument.wordprocessingml.document  》》》指定文件类型

    其他类型的文件参考:

      https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

    有时候会发生后台校验,返回提示信息,这时候返回json数据,所以修改一下:

    try里面处理json数据,catch里处理流数据

    axios({
            url: url,
            method: 'get',
            params: parameter,
            headers: signHeader,
            //指定返回的数据类型
            responseType: 'arraybuffer',
          }).then(res=> {
            try {
              let enc = new TextDecoder('utf-8')
              let data = JSON.parse(enc.decode(new Uint8Array(res)))
              this.downloadLoading = false;
              this.$message.warning(data.message)
            } catch (err) {
              //application/vnd.openxmlformats-officedocument.wordprocessingml.document 》》》docx类型
              var blob = new Blob([res],
                { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8' });
              var downloadElement = document.createElement('a');
              //创建下载的链接
              var href = window.URL.createObjectURL(blob);
              downloadElement.href = href;
              //下载后文件名
              downloadElement.download = '请示.docx';
              document.body.appendChild(downloadElement);
              //点击下载
              downloadElement.click();
              //下载完成移除元素
              document.body.removeChild(downloadElement);
              //释放掉blob对象
              window.URL.revokeObjectURL(href);
              //加载loading
              this.downloadLoading = false;
            }
          })
        }
    本人经验学识有限,不足之处还希望可以交流交流。
  • 相关阅读:
    string类
    拓扑排序 图
    麦森数,高精度快速幂
    排列
    牛客练习赛28 B 数据结构
    牛客练习赛27 C-水图
    组合数
    树状数组
    k短路模板+例题
    Supreme Number(找规律,打表)
  • 原文地址:https://www.cnblogs.com/tdyang/p/15314494.html
Copyright © 2011-2022 走看看