jsp下载:为什么下载不了文件?

xsp 2004-08-24 12:46:38
String url=rs.getString("resurl");//从数据库中读取文件url
String path=getServletContext().getRealPath(url);
//System.out.println(path);

File f=new File(path);
if(f.exists())//检查文件是否存在
{
long l = f.length(); //文件长度
System.out.println("l="+l);//此处能输出文件的实际大小
java.io.InputStream in = new java.io.FileInputStream (f);
if(in != null)
{
String fs = f.getName();
response.reset();
response.setContentType("application/x-msdownload");
String s = "attachment; filename="+fs;
response.setHeader("Content-Disposition", s); //以上输出文件元信息
response.setContentLength((int)l); //设置输入文件长度
byte[] b = new byte[2048];
int len = 0;
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
while((len=in.read(b)) >0); //此处总读不到文件内容,为什么?用in.read(b,0,b.length)也不行
{
System.out.println("len="+len);//此处输出的len=-1
if(len>0)//此句如果不加就出错,因为前面的len=-1,为什么len=-1还不跳出循环呢?
bos.write(b,0,len); //向浏览器输出,结果生成一个长度为0的空文件

}
in.close(); //关闭文件输入流
bos.close();
}
return;
}
...全文
598 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chancelin 2004-08-26
  • 打赏
  • 举报
回复
在前面加上这两句:
response.setHeader("Content-Type","image/gif;name=\"filename.gif\"");
response.setHeader("Content-Disposition","inline; filename=\"filename.gif\"");
xsp 2004-08-25
  • 打赏
  • 举报
回复
To chancelin():你的代码我试了一下,刚开始还能成功,就是文件名有误,比如我的代码页面名为test.jsp,则无论下载什么文件,则保存时默认都是test.jsp.html,我就试着改别处,失败后将别处注释掉,只剩你的代码,结果就不能用了。郁闷。
chancelin 2004-08-24
  • 打赏
  • 举报
回复
很抱歉,我很少能看清楚别人的代码,这是我的一段代码,在使用中。
java.io.InputStream pic=rs.getBinaryStream("att_content");
java.io.OutputStream pw = response.getOutputStream();
byte[] b=new byte[4096];
int bt=pic.read(b);
while(bt!=-1){
pw.write(b,0,bt);
bt=pic.read(b);
}
pw.close();
pic.close();
rs.close();
wwsh 2004-08-24
  • 打赏
  • 举报
回复
帮你顶
xsp 2004-08-24
  • 打赏
  • 举报
回复
谢谢上面两位的关注。
其实smartupload上传下载都可以,我也在用。
只是我对上面的代码为什么出错不理解。
再说明一下,我上面的代码是想实现下载功能,不是上传。
lianeng 2004-08-24
  • 打赏
  • 举报
回复
來,幫你頂一下!
power17 2004-08-24
  • 打赏
  • 举报
回复
我习惯用第三方组件,用着方便,也简单。下面是一个用jspsmartupload组件实现上传的代

码,我调试过,暂时还没有找到不可以上传的文件类型。

html文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<table width="50%" border="1" align="center" cellpadding="0" cellspacing="1">
<tr>
<td><div align="center">
<form name="form1" method="post" action="jspsmartupload.jsp" enctype="multipart/form-data">
<p>file1:
<input name="file1" type="file" id="file1">
</p>
<p>
file2:
<input name="file2" type="file" id="file4">
</p>
<p>
<input type="submit" name="Submit" value="提交">
</p>
</form>
</div></td>
</tr>
</table>
</body>
</html>


jspsmartupload.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" import="java.util.*,com.jspsmart.upload.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<p>
<%! int i=0;%>
<%
SmartUpload su=new SmartUpload();
//su.setMaxFileSize(4096);
su.initialize(pageContext);
su.upload();
java.util.Date date=new java.util.Date();
String dt=String.valueOf(date.getTime());
String fn=String.valueOf(date.getYear()+1900)+String.valueOf(date.getMonth())
+String.valueOf(date.getDate())
+date.getHours()+date.getMinutes()+date.getSeconds();
/** Files files=su.getFiles();
com.jspsmart.upload.File file = su.getFiles().getFile(0);
i++;
file.saveAs("upload/"+fn+"."+file.getFileExt());**/
%>
</p>
<p><h1><font color="#FF0000">上传成功。</font></h1>
</p>
<p>上传信息如下:</p>
<p>
<%
try{
Files files=su.getFiles();
int count=files.getCount();
out.println("<table border="1" cellspacing="10" cellpadding="14"><tr>");
out.println("<td>formtter name</td><td>size of the file</td><td>upload name</td></tr><tr>");
for(int i=0;i<count;i++){
com.jspsmart.upload.File file=files.getFile(i);
if(file.isMissing()){
continue;
}
file.saveAs("upload/"+fn+"."+file.getFileExt());
out.println("<td>"+file.getFileName()+"</td>");
out.println("<td>"+file.getSize()+"</td>");
out.println("<td>"+fn+"</td></tr>");
}
out.println("</table>");}catch(Exception e){out.println("上传发生错误。<br>可能是文件太大。");}
%>
</p>
<p> </p>
</body>
</html>
xsp 2004-08-24
  • 打赏
  • 举报
回复
没人会吗?还是不屑回答?或者分太少?顶一下也行呀。

81,092

社区成员

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

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