java通过文件流实现下载文件

@RequestMapping(value="/download")
 public void download(Model model,HttpServletResponse response,HttpServletRequest request) throws Exception {
  //读取property文件,获取最新下载地址
  Properties props = new Properties();
  String filePath=getClass().getClassLoader().getResource("/").getPath() +"config.properties";
     InputStream in = new BufferedInputStream (new FileInputStream(filePath));
     props.load(in);
     String path = props.getProperty ("version.url");
    
   // 初始化文件流,提供客户端下载

  if(!"".equals(path)){
   path=new String(path.getBytes("ISO-8859-1"),"UTF-8");
   File file=new File(request.getSession().getServletContext().getRealPath("/")+path);//构造要下载的文件
   if(file.exists()){
    InputStream ins=new FileInputStream(request.getSession().getServletContext().getRealPath("/")+path);//构造一个读取文件的IO流对象
    BufferedInputStream bins=new BufferedInputStream(ins);//放到缓冲流里面
    OutputStream outs=response.getOutputStream();//获取文件输出IO流
    BufferedOutputStream bouts=new BufferedOutputStream(outs);
    //response.setContentType("application/x-download");//设置response内容的类型 普通下载类型
    response.setContentType("application/vnd.android.package-archive");//设置response内容的类型 下载安卓应用apk
    response.setContentLength((int) file.length());//设置文件大小
    response.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(file.getName(), "UTF-8"));//设置头部信息
    int bytesRead = 0;
    byte[] buffer = new byte[8192];
    //开始向网络传输文件流
    while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
     bouts.write(buffer, 0, bytesRead);
    }
    bouts.flush();//这里一定要调用flush()方法
    ins.close();
    bins.close();
    outs.close();
    bouts.close();
   }else{
    System.out.println("下载的文件不存在");
   }
  }else{
   System.out.println("下载文件时参数错误");
  }

 }

 

注意了,如果没有设置下载文件的大小,手机可能会不支持下载哦!如果是安卓应用,必须修改下载类型为安卓应用!

参考自:http://www.cnblogs.com/yaozhongxiao/archive/2013/07/17/3194765.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值