Ajax处理下载文件response没有反应

要实现下载Excel的功能,思路很简单,后台servlet根据数据库的数据生成Excel保存在指定位置,然后保存到response的输入流中,最后将零时的Excel删除:

....
//省略poi生成Excle的过程
....

response.setHeader("content-type","text/html;charset=UTF-8");
response.addHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8")); 

InputStream in = null;  
OutputStream out = null;     
try { 
    in = new FileInputStream(filePath + "\\" + fileName + ".xls");
    int len = 0;  
    byte[] buffer = new byte[1024];  
    out = response.getOutputStream();  
    while((len = in.read(buffer)) > 0) {  
    out.write(buffer,0,len);  
    }                         
}catch(Exception e) {  
    System.out.println("网络连接故障!错误信息:"+e.getMessage());
}finally {  
    if(in != null) {  
          try {  
              out.close();
              in.close(); 
              response.flushBuffer();
          }catch(Exception e) {  
              throw new RuntimeException(e);  
          }      
     }  
}

fileExcel.delete();//delete the excel in the end   

前台ajax也很简单:

    $.ajax({  
        type: "POST",  
        async: false,  
        url: regionURL ,
        success:function(data){
//          alert(data);
        }
    }); 

想法很好,但是现实很残酷,点了下载按钮,一点反应都没!
最后网上查了下,发现问题是ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的。
解决方案,不用ajax:

window.location.href=regionURL;

参考

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值