(每周3篇,这周是javaweb开发中的)
上篇中做了上传,这么下载功能就急需实现了
这里只简单的贴出代码:
前面数据库的链接等直接调用了现成的,这里不再贴出,相信大家都看的懂,如果真不懂的朋友就先看jdbc吧
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
conn=DBUtil.getJNDIConnection();
String sql="select filename,upload from qualityupload where id="+id;
try {
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
if (rs.next()) {
response.setHeader("Content-Type", "application/octet-stream");
//1)Content-Type的作用
//该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型。
//例如:当Content-Type 的值设置为text/html和text/plain时,前者会让浏览器把接收到的实体内容以HTML格式解析,后者会让浏览器以普通文本解析.
//这里是设置为八进制文件更新
response.setHeader("Content-Disposition","attachment;filename="+java.net.URLEncoder.encode(rs.getString("filename"),"UTF-8"));
//2)Content-Disposition 的作用
//当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
//第一个参数attachment 是附件形式下载,第二个参数是文件名,第三个当然是编码方式了
response.setHeader("Connection", "close");
//这个就很显然了,关闭 connection
//一下代码是和上传相反的,试试吧,谁用谁知道
ServletOutputStream sout = response.getOutputStream();
InputStream in = rs.getBinaryStream("upload");
byte b[] = new byte[1024*8];
for(int i=in.read(b);i!=-1;)
{
sout.write(b);
i=in.read(b);
}
sout.flush();
sout.close();
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
QualityBean qb=new QualityBean();
qb.close_all();
response.setHeader()的用法:可以参考下面链接,上面有详细的介绍