(每週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()的用法:可以參考下面鏈接,上面有詳細的介紹