Java檔案下載的幾種方式

一隻小螞蟻吆發表於2014-12-22
         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   void  downloadNet(HttpServletResponse response)  throws  MalformedURLException {   
         //  下載網路檔案    
         int  bytesum  =   0 ;   
         int  byteread  =   0 ;   
  
        URL url  =   new  URL( " windine.blogdriver.com/logo.gif " );   
  
         try  {   
            URLConnection conn  =  url.openConnection();   
            InputStream inStream  =  conn.getInputStream();   
            FileOutputStream fs  =   new  FileOutputStream( " c:/abc.gif " );   
  
             byte [] buffer  =   new   byte [ 1204 ];   
             int  length;   
             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();   
    }  

 

相關文章