zoukankan      html  css  js  c++  java
  • 下载文件(前端+后台)

    1,页面

    <a href="javascript:void(0)" class="btn buttonBox btn-primary " onclick="downloadExampleDataTemplate()" style="background-color: #1ab394;border-color: #1ab394;height: 32px;">下载样例模版</a>

    2,js

    //下载样例模板
    function downloadExampleDataTemplate() {
        var id = $("#id").val();
        window.location.href="downloadExampleDataTemplate?id="+id;
    }

    3,后台

    /**
         * 下载文件
         * @param response
         * @param fileName 文件名称
         * @author 
         * @date 2018/3/31
         */
        public static void downFile(HttpServletResponse response, String fileName, String templateUrl) {
            String filePath = templateUrl+fileName+".xls";
    
            //读取要下载的文件,保存到文件输入流
            try {
                // 设置头部信息
                response.setHeader(
                        "Content-disposition",
                        "attachment;filename="
                                + URLEncoder.encode(fileName+".xls", "UTF-8"));
                FileInputStream in = new FileInputStream(filePath);
                //创建输出流
                OutputStream out = response.getOutputStream();
                //创建缓冲区
                byte buffer[] = new byte[1024];
                int len = 0;
                //循环将输入流中的内容读取到缓冲区当中
                while((len=in.read(buffer))>0){
                    //输出缓冲区的内容到浏览器,实现文件下载
                    out.write(buffer, 0, len);
                }
                //关闭文件输入流
                in.close();
                //关闭输出流
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    4,出现问题

    (1)一开始用的ajax发送的请求

    $.ajax({
                    url:"downFile",
                    type:'post',
                    async:true,
                    data:$("#queryCourseForm").serialize(),//携带查询条件
                    success:function () {
                       
                    }
                });

    但是响应头正确,数据也正确的传到后台,但是未下载文件

    总结(参考:https://www.cnblogs.com/qlqwjy/p/8971207.html):

    即使ajax请求到一个controller在跳转到下载的controller上也不能下载,百度了一下总结下原因:发现原来jQuery的ajax回调已经把response的数据傻瓜式的以字符串的方式解析.

     5,解决办法

    参考:https://www.cnblogs.com/qlqwjy/p/8971207.html

    • 第一种:将传条件的以表单提交的方式进行(推荐这种)-----这种方式也可以用来页面跳转
      $("#queryCourseForm").attr("action",contextPath+"/downCourses.do");//改变表单的提交地址为下载的地址
                  $("#queryCourseForm").submit();//提交表单
    • 第二种:以window.location.href="xxx"的方式请求下载地址(我用的这一种)
      window.location.href=contextPath+"/downCourses.do"
  • 相关阅读:
    .Net创建Windows服务完成批量导出功能(错误速查)
    WIN7 64位对Excel操作异常
    登陆优化的经验
    SQL 使用触发器常见错误
    CSS样式表优化
    JavaScript getMonth() 方法
    MVC架构 -- 初学试水<选课管理系统>
    触摸不到的天空
    嵌套 QQ、微博 通讯工具到HTML中
    CSS 实现样式下拉菜单
  • 原文地址:https://www.cnblogs.com/cailijuan/p/10220985.html
Copyright © 2011-2022 走看看