javaweb中下载二进制文件

(每周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()的用法:可以参考下面链接,上面有详细的介绍

http://www.itjianghu.net/120114/40922824085648245.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值