下载文件(前端+后台)

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"

     

转载于:https://www.cnblogs.com/cailijuan/p/10220985.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值