代码如下
<%@ page contentType="text/html;charset=GBK" import="java.io.*"%>
<%
String path = (String) request.getAttribute("path");
java.io.File file = new java.io.File(path);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[1024];
String fileName = java.net.URLEncoder.encode(path.substring(path.lastIndexOf("\\") + 1), "UTF-8");// 处理中文文件名的问题
System.out.println("fileName = " + fileName);
fileName = new String(fileName.getBytes("UTF-8"), "GBK");// 处理中文文件名的问题
System.out.println("fileName = " + fileName);
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-rar-compressed");// 不同类型的文件对应不同的MIME类型
response.setHeader("Content-Disposition",
"attachment; filename=" + fileName);
OutputStream os = response.getOutputStream();
int i = 0;
while ((i = bis.read(buffer)) != -1) {
os.write(buffer, 0, i);
}
bis.close();
os.close();%>
问题是能够正常下载,但是后台报错。文件能正常下载,下载的内容也是对的
报错如下
fileName = %E4%BD%A0%E5%A5%BD.txt
fileName = %E4%BD%A0%E5%A5%BD.txt
2011-4-12 6:56:45 org.apache.catalina.core.StandardHostValve custom
严重: Exception Processing ErrorPage[exceptionType=java.lang.Exception, location=/Public/ErrorPage.jsp]
java.lang.IllegalStateException
at org.apache.coyote.Response.reset(Response.java:297)
at org.apache.catalina.connector.Response.reset(Response.java:653)
at org.apache.catalina.connector.Response.reset(Response.java:920)
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:357)
at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:213)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)

解决方案 »

  1.   

    os前面加flush:
    os.flush();
    os.close();还不行的话,楼主可以看看这个帖子
    http://blog.csdn.net/patriotlml/archive/2007/05/28/1628556.aspx
      

  2.   

    os前面加flush:
    os.flush();
    os.close();还不行的话,楼主可以看看这个帖子
    http://blog.csdn.net/patriotlml/archive/2007/05/28/1628556.aspx
      

  3.   

    你的上传 文件大吗 我现在的上传 在远程上传 慢压  可否看你的代码
    30w个号 超慢1个小时 本地1分钟 不知原因  求你帮助 或发邮件 谢谢了 QQ :1600172177
      

  4.   

    os前面加flush:
    os.flush();
    os.close();