JSP实现下载的痛苦[word、excel、下载乱码] 彻底解决 下载文件内容及文件名乱码

  1. 建议以后都不要用JSP来实现下载,最好用 servlet的方式来实现。。。
  2. 如果一定要实现JSP方式来下载,最好页面内java代码体外(<%%>符号外)不要包含任何内容(空格与回车也不可以有)
  3. 当然java代码部分可以有空格 和 回车
  4. 具体实现代码如下:

           <%@ page language="java" pageEncoding="gbk"%><%@ page import="org.apache.commons.logging.Log,org.apache.commons.logging.LogFactory" %><%
   
   Log log = LogFactory.getLog(this.getClass());
   String name_cn=(String)request.getAttribute("name_cn");///获取文件名称 格式 sss.doc
   String abstrUrl=(String)request.getAttribute("abstrUrl");//获取文件相对或绝对路径,为空走默认!
   
   response.setContentType("application/octet-stream;charset=gbk"); // charset=gb2312
   String ffnmae=new String(name_cn.getBytes("gb2312"),"iso8859-1");//格式化 名称
   response.setHeader("Content-Disposition","attachment; filename="+ffnmae);

   java.io.FileInputStream in = null;  
   java.io.BufferedInputStream binpu = null;
   java.io.BufferedOutputStream bout = null;
   try{    
    in = new java.io.FileInputStream(abstrUrl);  
    binpu = new java.io.BufferedInputStream(in);
    bout = new java.io.BufferedOutputStream(response.getOutputStream());
    byte[] b = new byte[1024];  
    int i = 0;  
    while((i = binpu.read(b,0,b.length)) > 0){  
     bout.write(b, 0, i);  
    }      
    bout.flush();
    //要加以下两句话,否则会报错   
    out = pageContext.pushBody();
    response.flushBuffer();
    out.clear();  
   }catch(Exception e){  
    log.error("下载错误,错误URL:"+abstrUrl, e);
   }finally{  
    if(in != null){  
     try {
      in.close();
     } catch (java.io.IOException e) {
      log.error("关闭文件错误", e);
     } 
     in = null;  
    } 
    if(binpu != null){  
     try {
      binpu.close();
     } catch (java.io.IOException e) {
      log.error("关闭输入流错误", e);
     }   
     binpu = null;  
    } 
    if(bout != null){  
     try {
      bout.close();
     } catch (java.io.IOException e) {
      log.error("关闭输出流错误", e);
     }  
     bout = null;  
    } 
   }
%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值