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

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

<%@ 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;
}
}
%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值