• 主页
  • 个人简介
    • 圣墨 photo

      圣墨

      一个爱折腾,有诗有远方的人

    • Learn More
    • Github
    • Cnblogs
    • Weibo
  • 文章
    • 所有文章
    • 所有标签
  • Html&Css
  • Javascript
  • 设计模式
  • 前端性能优化
  • 原生实现专题
  • 数据结构与算法
  • Book
  • 面试题
  • 前端工具
  • 随记

post导出/下载文件

04 Apr 2019

Reading time ~1 minute

post方式实现导出/下载文件

    项目需求: 前端需要传入过多的参数给后端,get地址栏不行,只能接受post方式去导出数据

1、get的下载方式

通常下载方式如下:

    let url =  xxxx.action?a=xx&b=yy;
    window.location.href = url;
    // 或者
    window.open(url, '_self')

弊端:当请求参数较多时,get的方式无法使用,这时候需要考虑post的方式,但是直接通过ajax的post的方式无法调用浏览器的下载功能

2、post的下载方式

原理: 创建一个隐藏form表单,通过form表单的提交刷新功能,实现下载。代码如下:

    // vue项目代码
  // 导出excel
   function postExcelFile(params, url) {
      //params是post请求需要的参数,url是请求url地址
      var form = document.createElement("form");
      form.style.display = "none";
      form.action = url;
      form.method = "post";
      document.body.appendChild(form);
    // 动态创建input并给value赋值
      for (var key in params) {
        var input = document.createElement("input");
        input.type = "hidden";
        input.name = key;
        input.value = params[key];
        form.appendChild(input);
      }

      form.submit();
      form.remove();
    }

    //调用
    postExcelFile(
        { currentPage: 2, pageSize: 20 },
        'url/xxxxxxx/' //接口地址
      );

注意点:传给后端的参数不是json对象的形式,而是 currentPage=2&pageSize=20, 因此需要后端的配合



vue  微博  QQ  朋友圈