1传统的ajax虽然能提交到后台,但是返回的数据被解析成json,html,text等字符串,无法响应浏览器下载。就算使用bob模拟下载,数据量大时也不方便

废话不多说:上代码(此处是Layui监听提交,传统的html提交更方便)

  1. //监听提交
    form.on('submit(formDemo)', function (data) {
    layer.msg(JSON.stringify(data.field));
    //第一种方式 这种方式直接打开链接,参数后缀到后台查找,即可下载
    // window.open('/jump/download?id='+data.field.id, '_blank');

    //第二种方式 这种方式模拟表单提交,动态获取值传入后台
    try {
    var queryForm = $('#llll');
    var exportForm = $("<form action=' /jump/download' method='post'></form>")

    queryForm.find("input").each(function() {
    var name = $(this).attr("name");
    var value = $(this).val();
    exportForm.append("<input type='hidden' name='" + name + "' value='" + value + "'/>")
    });

    queryForm.find("select").each(function() {
    var name = $(this).attr("name");
    var value = $(this).val();
    exportForm.append("<input type='hidden' name='" + name + "' value='" + value + "'/>")
    });

    $(document.body).append(exportForm);
    exportForm.submit();
    } catch (e) {
    console.log(e);
    } finally {
    exportForm.remove();
    }

    //3第三种ajax提交表单,不相应浏览器下载 这种方式可以提交一个Map 去后台但是返回文件不容易下载,精通原生js的伙伴可以试试,比较麻烦,再次我就不献丑了
    // $.ajax({
    // type:"GET",
    // url:"/jump/download",
    // data:JSON.stringify(data.field),
    // contentType:"application/json;charset=UTF-8",
    // success:function (data) {
    //
    // }
    // });
    return false;//ajax 提交时Layui防止页面自动刷新
    });

  1. @ApiOperation(value = "导出word文档", notes = "{\"id\":\"11\"}")
    @RequestMapping(value = "/download",method = RequestMethod.POST)
    public void download(HttpServletRequest request, HttpServletResponse response) throws IOException {

    //对应前端第三种提交方式 @RequestBody Map map 第一种方式支持前端提交过来一个Map
    Map<String, Object> userMapMeS = new HashMap<String, Object>();
    // String fileName=map.get("name").toString();
    // userMapMeS.put("name", map.get("name").toString());
    // userMapMeS.put("id", map.get("id").toString());
    // userMapMeS.put("age", map.get("age").toString());
    // userMapMeS.put("phone", map.get("phone").toString());
    // userMapMeS.put("password", map.get("password").toString());
    // userMapMeS.put("email", map.get("email").toString());
    // userMapMeS.put("times", map.get("times").toString());
    // userMapMeS.put("address", map.get("address").toString());
    // userMapMeS.put("sex", map.get("sex").toString());
    // userMapMeS.put("work", map.get("work").toString());
    // userMapMeS.put("hobby", map.get("hobby").toString());
    //对应第一种前端提交方式

    // String id=request.getParameter("id");
    // Map map=new HashMap();
    // map.put("id",id);
    // User user= userService.selectUser(map);
    // String fileName=user.getName();
    // Map<String, Object> userMapMeS = new HashMap<String, Object>();
    // userMapMeS.put("name", user.getName());
    // userMapMeS.put("id", user.getId());
    // userMapMeS.put("age", user.getAge());
    // userMapMeS.put("phone", user.getPhone());
    // userMapMeS.put("password", user.getPassword());
    // userMapMeS.put("email", user.getEmail());
    // userMapMeS.put("times", user.getTimes());
    // userMapMeS.put("address", user.getAddress());
    // userMapMeS.put("sex", user.getSex());
    // userMapMeS.put("work", user.getWork());
    // userMapMeS.put("hobby", user.getHobby());

    //对应前端第二种前端模拟表单提交
    String fileName =request.getParameter("name").toString();
    userMapMeS.put("name", request.getParameter("name").toString());
    userMapMeS.put("id", request.getParameter("id").toString());
    userMapMeS.put("age", request.getParameter("age").toString());
    userMapMeS.put("phone", request.getParameter("phone").toString());
    userMapMeS.put("password", request.getParameter("password").toString());
    userMapMeS.put("email", request.getParameter("email").toString());
    userMapMeS.put("times", request.getParameter("times").toString());
    userMapMeS.put("address", request.getParameter("address").toString());
    userMapMeS.put("sex", request.getParameter("sex").toString());
    userMapMeS.put("work", request.getParameter("work").toString());
    userMapMeS.put("hobby", request.getParameter("hobby").toString());
    String endCodeFileName = new String(fileName.getBytes("utf-8"), "ISO8859-1");
    response.reset();//清除空白行纺织报错
    response.setHeader("Access-Control-Allow-Origin", "*");//所有域都可以跨
    response.setHeader("Content-Type", "application/octet-stream;charset=UTF-8");//二进制 流文件
    response.setHeader("Content-Disposition", "attachment;filename=" + endCodeFileName+".doc");//下载及其文件名
    response.setHeader("Connection", "close");//关闭请求头连接
    //设置文件在浏览器打开还是下载
    response.setContentType("application/x-download");

    WordUtil wUtil = new WordUtil();
    long now= System.currentTimeMillis();
    wUtil.createDoc(userMapMeS, response.getOutputStream());
    long end= System.currentTimeMillis();
    long ddd=end-now;
    System.out.println("ddd" + ddd);

    }
  1. 工具类在下篇文章

前端调用后台接口下载word文档的两种方法的更多相关文章

  1. .NET通过调用Office组件导出Word文档

    .NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...

  2. Java导出freemarker实现下载word文档格式功能

    首先呢,先说一下制作freemarker模板步骤, 1. 在WPS上写出所要的下载的word格式当做模板 2. 把模板内不固定的内容(例:从数据库读取的信息)写成123或者好代替的文字标注 3. 把固 ...

  3. ASP.NET实现在线浏览Word文档另一种解决方案(Word转PDF)

    ASP.NET实现在线浏览Word文档另一种解决方案(Word转PDF)      上述博文里提到的在线浏览pdf的方案不错,但word转pdf的那个dll只支持doc不支持docx,附上最新的下载链 ...

  4. 前端调用后端接口下载excel文件的几种方式

    今天有一个导出相应数据为excel表的需求.后端的接口返回一个数据流,一开始我用axios(ajax类库)调用接口,返回成功状态200,但是!但是浏览器没有自动下载excel表,当时觉得可能是ajax ...

  5. PHP生成word文档的三种实现方式

    PHP生成word原理 利用windows下面的 com组件 利用PHP将内容写入doc文件之中 具体实现: 利用windows下面的 com组件 原理:com作为PHP的一个扩展类,安装过offic ...

  6. 将html转换为word文档的几种方式

    1 基于wps直接将页面信息下载成word文档 public void test() { WPS.Application wps = null; try { wps = new WPS.Applica ...

  7. DEDECMS5.5/5.6/5.7列表页调用TAG标签(热门标签)的两种方法

    DEDECMS5.5/5.6/5.7列表页调用TAG标签的两种方法: 一.DedeCMSv5.6及其以前版本: dedecms默认在列表是无法调用tag标签的,经过各位版主们的帮助,现给大家提供出2种 ...

  8. 使用PHP对word文档进行操作的方法

    使用php时,因为加密等原因,如果直接用FILE后者OPEN等函数读取WORD的话往往是乱码,原来要使用COM 这是我简单的一个读取并存储到新的WORD上的文件<? // 建立一个指向新COM组 ...

  9. C# 打印PDF文档的10种方法

    操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...

随机推荐

  1. 高性能内存图数据库RedisGraph(三)

    这篇文章,我将介绍截止目前,RedisGraph的最新版本(v2.4)对Cypher语言的支持情况. 1.模式(patterns) RedisGraph已支持Cypher中所有的模式. 2.类型(ty ...

  2. GCD SUM

    GCD SUM 求 \[\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j) \] 将原式变换得到 \[\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{ ...

  3. ifix vba 读取计算机中的txt文件,截取字符串显示

    利用vba脚本,使用Scripting.FileSystemObject对象可以实现对文本文件的操作,下面以一个朋友的实际例子为例将截获的字符串进行页面显示. Private Sub CommandB ...

  4. 【奇妙的JavaScript】# 1

    奇妙的JavaScript 本专题整理了一些JavaScript的怪异行为,大部分都是选择题,题目都是简单的表达式.可以测试你有多了解 JavaScript,拓宽你的认知边界! 该专题计划每周更新1- ...

  5. 华为高斯DB(for MySQL)搭建演示

    产品架构 云数据库 GaussDB(for MySQL)整体架构自下向上分为三层. 存储层: 基于华为DFV存储,提供分布式.强一致和高性能的存储能力,此层来保障数据的可靠性以及横向扩展能力. 存储抽 ...

  6. noip模拟测试10

    T1 这道题在考场上想到了二维前缀和,就是自己算前缀和的方式有点麻烦,导致花的时间较长,但还是成功搞了出来. 因为暴力计算的话需要不停枚举左上角和右下角的 i ,j, 时间复杂度为 n^4 ,我当时就 ...

  7. 大都市meg DFS序

    题目描述 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n的n个小村庄, ...

  8. 为什么说使用 Linux 系统学习 OpenGL 更方便

    前言 上一篇随笔介绍了我的电脑,同时也介绍了 Ubuntu 20.10 系统的安装和美化.这一篇,我将正式开始 OpenGL 之旅.使用 Ubuntu 来进行开发,不仅仅只是因为我对 Linux 桌面 ...

  9. 虚拟基站(VRS)

      虚拟参考站技术(Virtual Reference Station,简称VRS)也称虚拟基准站技术,是一种网络实时动态测量实时动态测量(RTK)技术,通过在某一区域内建立构成网状覆盖的多个GPS基 ...

  10. C++ 2(将类分文件) //点和圆的关系 //设计一个圆形类 和一个点类 计算点和圆的关系 //点到圆心的距离 == 半径 点在圆上 //点到圆心的距离 > 半径 点在圆外 //点到圆心的距离 < 半径 点在圆内 //点到圆心的距离 获取 ....... (x1 -x2)^2 + (y1-y2)^2 开根号 和半径对比 // 计算 可以 两边同时 平方

    1 源文件 main.cpp 2 //点和圆的关系 3 //设计一个圆形类 和一个点类 计算点和圆的关系 4 //点到圆心的距离 == 半径 点在圆上 5 //点到圆心的距离 > 半径 点在圆外 ...