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]