美文网首页
2021-12-25-🌦🌦 下载文件两种方式总结

2021-12-25-🌦🌦 下载文件两种方式总结

作者: 沐深 | 来源:发表于2021-11-19 11:10 被阅读0次

    1.后台服务器有静态资源且是固定的文件名(GET方式下载文件)

    场景:已经生成的静态文件

    第一种使用js
    window.location.href="http://www.域名/template.xlsx(文件名)"
    
    第二种 href
    <a href="http://www.域名/template.xlsx(文件名)"></a>
    

    ps: 有跨域问题

    2.后台返回文件流

    场景:动态数据生成

    第一种 Data 协议
    axios.post(请求路径URL, {参数Params}, {
                responseType: 'blob'
              }).then(function(res){
                var blob = res.data;
               // FileReader主要用于将文件内容读入内存
                var reader = new FileReader();
                reader.readAsDataURL(blob);
                // onload当读取操作成功完成时调用
                reader.onload = function(e) {
                  var a = document.createElement('a');
                  // 获取文件名fileName
                  var fileName = res.headers["content-disposition"].split("=");
                  fileName = fileName[fileName.length - 1];
                  fileName = fileName.replace(/"/g, "");
                  a.download = fileName;
                  a.href = e.target.result;
                  document.body.appendChild(a);
                  a.click();
                  document.body.removeChild(a);
                }
              });
    
    第二种使用 blob + window.URL.createObjectURL

    动态数据下载,原理都是创建 blob协议的链接

    //  `responseType` 表示服务器响应的数据类型,
    //  可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream',
    //  不是header内的属性
    
    axios.post(请求路径URL, {参数Params}, {
                responseType: 'blob'
              }).then(function(response){
                const name = "XXX.xls"
                 const url = window.URL.createObjectURL(new Blob([response]));
                 const link = document.createElement("a");
                 link.href = url;
                 link.download = name
                 document.body.appendChild(link);
                 link.click();
                 document.body.removeChild(link);
              });
    
    第三种 href + data协议

    适用于json,document 纯文档下载

    function download(filename, text) {
      console.log(filename, text);
      var element = document.createElement("a");
      element.setAttribute(
        "href",
        "data:text/plain;charset=utf-8," + encodeURIComponent(text)
      );
      element.setAttribute("download", filename);
    
      element.style.display = "none";
      document.body.appendChild(element);
    
      element.click();
    
      document.body.removeChild(element);
    }
    
    download('download.json', '{a: 1}')
    

    相关文章

      网友评论

          本文标题:2021-12-25-🌦🌦 下载文件两种方式总结

          本文链接:https://www.haomeiwen.com/subject/hxgdtrtx.html