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"
  • 相关阅读:
    opencart后台操作--第一节 多语言篇---中文语言包
    Apache mod_rewrite实现HTTP和HTTPS重定向跳转
    js搞定网页的简繁转换
    TP5 首页导航一级和二级分类
    php中is_null,empty,isset,unset 的区别详细介绍
    thinkPHP5 引入模板
    mac Gitblit安装
    springCloud 之 Eureka注册中心高可用配置
    spring cloud config-配置中心
    链路追踪工具Zipkin简单整合
  • 原文地址:https://www.cnblogs.com/cailijuan/p/10220985.html
Copyright © 2011-2022 走看看