jsx112 发表于 2013-1-26 14:40:31

java文件下载的几种方式

publicHttpServletResponse download(String path, HttpServletResponse response) {            try{                //path是指欲下载的文件的路径。                File file=   newFile(path);                //取得文件名。                String filename=file.getName();                //取得文件的后缀名。                String ext=filename.substring(filename.lastIndexOf( " . " )+   1 ).toUpperCase();                  //以流的形式下载文件。                InputStream fis=   newBufferedInputStream( newFileInputStream(path));                byte [] buffer=   new   byte ;               fis.read(buffer);               fis.close();                //清空response                response.reset();                //设置response的Header                response.addHeader( " Content-Disposition " ," attachment;filename= "   +   newString(filename.getBytes()));               response.addHeader( " Content-Length " ,""   +file.length());               OutputStream toClient=   newBufferedOutputStream(response.getOutputStream());               response.setContentType( " application/octet-stream " );               toClient.write(buffer);               toClient.flush();               toClient.close();         }catch(IOException ex) {               ex.printStackTrace();         }            returnresponse;       }          public   voiddownloadLocal(HttpServletResponse response)throwsFileNotFoundException {            //下载本地文件            String fileName=   " Operator.doc " .toString();//文件的默认保存名            //读到流中            InputStream inStream=   newFileInputStream( " c:/Operator.doc " ); //文件的存放路径            //设置输出的格式            response.reset();         response.setContentType( " bin " );         response.addHeader( " Content-Disposition " ," attachment; filename=\ ""+ fileName +" \ "" );            //循环取出流中的数 据             byte [] b=   new   byte [ 100 ];            intlen;            try{                while((len=inStream.read(b))>   0 )                   response.getOutputStream().write(b,0 , len);               inStream.close();         }catch(IOException e) {               e.printStackTrace();         }       }          public   voiddownloadNet(HttpServletResponse response)throwsMalformedURLException {            //下载网络文件             intbytesum=   0 ;            intbyteread=   0 ;             URL url=   newURL( " windine.blogdriver.com/logo.gif " );            try{               URLConnection conn=url.openConnection();               InputStream inStream=conn.getInputStream();               FileOutputStream fs=   newFileOutputStream( " c:/abc.gif " );                  byte [] buffer=   new   byte [ 1204 ];                intlength;                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   voiddownLoad(String filePath, HttpServletResponse response,booleanisOnLine)throwsException {         File f=   newFile(filePath);            if( ! f.exists()) {               response.sendError( 404 ," File not found! " );                return ;         }         BufferedInputStream br=   newBufferedInputStream( newFileInputStream(f));            byte [] buf=   new   byte [ 1024 ];            intlen=   0 ;             response.reset();//非常重要             if(isOnLine) {//在线打开方式                URL u=   newURL( " 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();       } 
页: [1]
查看完整版本: java文件下载的几种方式