急!关于下载文件问题!不知道怎么会事情!

epson1980 2004-11-17 12:49:08
我用这段代码下载个包文件,一切正常,但最后关闭流的时候出现了问题。
<%

// 得到文件名字和路径
String filename = "ftp_with_source_200f_src.rar";
String filepath = "D:\\";

// 设置响应头和下载保存的文件名
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition",
"attachment; filename=\"" + filename + "\"");

// 打开指定文件的流信息
java.io.FileInputStream fileInputStream =
new java.io.FileInputStream(filepath + filename);
try
{
// 写出流信息
int i;
while ((i=fileInputStream.read()) != -1) {
out.write(i);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
fileInputStream.close();
out.close();
}
%>

在finally中我关闭流就有异常出现。
如果我删除掉,就没问题了。
我现在怕如果不关闭流的话,资源会不会无法释放,导致中间件崩溃。
异常如下:
java.io.IOException: Stream closed

java.io.IOException: Stream closed

at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:242)

at org.apache.jasper.runtime.JspWriterImpl.clearBuffer(JspWriterImpl.java:190)

at org.apache.jsp.file$jsp._jspService(file$jsp.java:100)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)

at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)

at java.lang.Thread.run(Thread.java:534)


...全文
131 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zorro09 2005-03-22
  • 打赏
  • 举报
回复
<%@page language="java" pageEncoding="GB2312" import="com.jspsmart.upload.*"%><%
SmartUpload download = new SmartUpload();
try{
download.initialize(pageContext);
download.setContentDisposition(null);
String filename=request.getParameter("filename");
String path="/upload/"+filename;
download.downloadFile("/down/form_txt12.gif");
}catch(SmartUploadException e){e.printStackTrace();}%>


我也在这个问题上搞了好久,为了让更多的人不吃这个苦,吗的要这么写!!!!在你得download.jsp中这么写!
epson1980 2004-11-18
  • 打赏
  • 举报
回复
送分喽!!!
epson1980 2004-11-18
  • 打赏
  • 举报
回复
送分!!!
fruitfull 2004-11-18
  • 打赏
  • 举报
回复
学习!
xzq686 2004-11-18
  • 打赏
  • 举报
回复
解决了。那就顶一下。。。
epson1980 2004-11-18
  • 打赏
  • 举报
回复
解决了,原来不该把out.close();关闭。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧