Java中几种常用的文件下载方式

	public  HttpServletResponse download(String path, HttpServletResponse response) {
        try  {
            //  path是指欲下载的文件的路径。
           File file  =   new  File(path);
            //  取得文件名。
           String filename  =  file.getName();
            //  取得文件的后缀名。
           String ext  =  filename.substring(filename.lastIndexOf( " . " )  +   1 ).toUpperCase();

            //  以流的形式下载文件。
           InputStream fis  =   new  BufferedInputStream( new  FileInputStream(path));
            byte [] buffer  =   new   byte [fis.available()];
           fis.read(buffer);
           fis.close();
            //  清空response
           response.reset();
            //  设置response的Header
           response.addHeader( " Content-Disposition " ,  " attachment;filename= "   +   new  String(filename.getBytes()));
           response.addHeader( " Content-Length " ,  ""   +  file.length());
           OutputStream toClient  =   new  BufferedOutputStream(response.getOutputStream());
           response.setContentType( " application/octet-stream " );
           toClient.write(buffer);
           toClient.flush();
           toClient.close();
       }  catch  (IOException ex) {
           ex.printStackTrace();
       }
        return  response;
   }

    public   void  downloadLocal(HttpServletResponse response)  throws  FileNotFoundException {
        //  下载本地文件
       String fileName  =   " Operator.doc " .toString();  //  文件的默认保存名
        //  读到流中
       InputStream inStream  =   new  FileInputStream( " c:/Operator.doc " ); //  文件的存放路径
        //  设置输出的格式
       response.reset();
       response.setContentType( " bin " );
       response.addHeader( " Content-Disposition " ,  " attachment; filename=\ ""  + fileName +  " \ "" );
        //  循环取出流中的数据
        byte [] b  =   new   byte [ 100 ];
        int  len;
        try  {
            while  ((len  =  inStream.read(b))  >   0 )
               response.getOutputStream().write(b,  0 , len);
           inStream.close();
       }  catch  (IOException e) {
           e.printStackTrace();
       }
   }

    public static void  downloadNet(String urlStr,String fileName)  throws  MalformedURLException {
        //  下载网络文件
        int  bytesum  =   0 ;
        int  byteread  =   0 ;

       URL url  =   new  URL( urlStr );

        try  {
           URLConnection conn  =  url.openConnection();
           InputStream inStream  =  conn.getInputStream();
           FileOutputStream fs  =   new  FileOutputStream( "D:/"+fileName);

            byte [] buffer  =   new   byte [ 1204 ];
            while  ((byteread  =  inStream.read(buffer))  !=   - 1 ) {
               bytesum  +=  byteread;
               System.out.println(bytesum);
               fs.write(buffer,  0 , byteread);
           }
       }  catch  (FileNotFoundException e) {
           e.printStackTrace();
       }  catch  (IOException e) {
           e.printStackTrace();
       }
   }
//支持在线打开文件的一种方式
    public   void  downLoad(String filePath, HttpServletResponse response,  boolean  isOnLine)  throws  Exception {
       File f  =   new  File(filePath);
        if  ( ! f.exists()) {
           response.sendError( 404 ,  " File not found! " );
            return ;
       }
       BufferedInputStream br  =   new  BufferedInputStream( new  FileInputStream(f));
        byte [] buf  =   new   byte [ 1024 ];
        int  len  =   0 ;

       response.reset();  //  非常重要
        if  (isOnLine) {  //  在线打开方式
           URL u  =   new  URL( " file:/// "   +  filePath);
           response.setContentType(u.openConnection().getContentType());
           response.setHeader( " Content-Disposition " ,  " inline; filename= "   +  f.getName());
            //  文件名应该编码成UTF-8
       }  else  {  //  纯下载方式
           response.setContentType( " application/x-msdownload " );
           response.setHeader( " Content-Disposition " ,  " attachment; filename= "   +  f.getName());
       }
       OutputStream out  =  response.getOutputStream();
        while  ((len  =  br.read(buf))  >   0 )
           out.write(buf,  0 , len);
       br.close();
       out.close();
   }
 

在网络搜集整理~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值