欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java文件下载的几种方式 博客分类: java编程引用  

程序员文章站 2024-03-04 20:05:36
...

 

 

 

     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();
    }