Servelet:
  package com.syit.scmis.common; 
import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 
/**  * @version  1.0  * @author  */ public class GetFile  extends HttpServlet  implements Servlet { 
 /**  * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)  */  public void doGet(HttpServletRequest req, HttpServletResponse resp)   throws ServletException, IOException {   doPost(req,resp);  } 
 /**  * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)  */  public void doPost(HttpServletRequest req, HttpServletResponse resp)   throws ServletException, IOException {   req.setCharacterEncoding("GBK");   String spath=req.getParameter("path");   if (spath.equals("")){    java.io.PrintWriter out=resp.getWriter();    out.println("Current directory is invalidate!");   }   else{    if (spath.indexOf("/download")==0){     req.setAttribute("parent",spath.substring(1));     spath=getServletContext().getRealPath(spath);     DownloadFile f=new DownloadFile();     if (f.getFileEx(spath,req,resp)==1){      req.getRequestDispatcher("/download.jsp").forward(req,resp);     }    }else{     java.io.PrintWriter out=resp.getWriter();     out.println("Current directory is invalidate!");    }   }  } 
}
  主要的工作Java类: /*  * 创建日期 2004-10-13  *  */ package com.syit.scmis.common; 
import java.io.*; import java.util.*; import javax.servlet.http.*; 
/**  *   * @author Fuqiming  * @version 1.0  *  */ public class DownloadFile {    public int getFileEx(String strpath,HttpServletRequest req,HttpServletResponse resp) throws IOException{   File f=new File(strpath);   if (f.isDirectory()){    req.setAttribute("list",getFile(strpath));    return 1;   }   else if (f.isFile()){    downFile(strpath,req,resp);    return 0;   }else {    throw new IOException("path is invalidate");   }  }    public ArrayList getFile(String strpath){   ArrayList array=new ArrayList();   File f=new File(strpath);   File[] fs=f.listFiles();   for (int i=0;i<fs.length;i++){    array.add(fs[i]);   }   return array;  }    public void downFile(String s,HttpServletRequest req,HttpServletResponse resp) throws IOException{   if (s==null){    throw new IOException("File name is must nt null");   }   File file =new File(s);   if (!file.isFile()){    throw new IOException("File is not exist");   }   System.out.println(req.getRemoteAddr()+"请求下载:"+s);   long l=file.length();   long p=0;   resp.reset();   resp.setHeader("Accept-Ranges", "bytes");   if (req.getHeader("Range") != null)   {     resp.setStatus(javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);    String sclient=req.getHeader("Range");    sclient=sclient.substring("bytes=".length());    if (sclient.charAt(sclient.length()-1)=='-') sclient=sclient.substring(0,sclient.length()-1);    p = Long.parseLong(sclient);    }   resp.setHeader("Content-Length", new Long(l - p).toString());    if (p != 0)    {    resp.setHeader("Content-Range","bytes " + new Long(p).toString() + "-" + new Long(l -1).toString() + "/" + new Long(l).toString());    }    resp.setContentType("application/octet-stream");   resp.setHeader("Content-Disposition",    "attachment;filename="+new String(file.getName().getBytes(),"iso-8859-1"));   long k =0;   int ibuffer=65536;   byte[] bytes=new byte[ibuffer];   FileInputStream fileinputstream = new FileInputStream(file);   try{    if (p!=0) fileinputstream.skip(p);    while (k<l){     int j=fileinputstream.read(bytes,0,ibuffer);     resp.getOutputStream().write(bytes,0,j);     resp.getOutputStream().flush();     k +=j;    }    System.out.println(req.getRemoteAddr()+"请求下载:"+s+"下载完毕");   }   catch(Exception e){    System.err.println("传输"+s+"失败,位置:"+k);    System.err.println(e.getMessage());   }   finally{    fileinputstream.close();   }  } }  
 
  |