阅读 690

JS 下载文件两种方式总结

下载文件分为两种形式,哪两种方式取决于后台;

  • 如果后台服务器的静态目录有可供下载的静态资源,后台人员告知你文件路径,直接window.location.href方式获取即可;

  • 如果后台服务器无可供下载的静态资源,返回的是一个文件流(response-type: application/octet-stream;charset=UTF-8 ),则使用第二种方式(将文件写入内存,并且创建a元素,a链接href属性指向内存中的文件,download属性指向要下载的文件名,模拟a元素的点击事件,进行下载;)

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

window.location.href="http://www.域名/template.xlsx(文件名)"

2、第二种,后台返回文件流

解决办法一:本地可测试;推荐使用;

第一步:引入axios第三方库

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

第二步:传参、调接口,下载文件

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);
            }
          });

解决办法二:form表单提交,本地不可测试;不推荐使用;

var exportForm = $('<form action="/api/cert/download" method="post">\        <input type="hidden" name="ids" value="'+参数ids值+'"/>\        </form>');
       $(document.body).append(exportForm);
       exportForm.submit();
       exportForm.remove();

服务器评测 http://www.cncsto.com/ 

服务器测评 http://www.cncsto.com/ 

站长资源 https://www.cscnn.com/ 

 


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐