package cn.lnu.web.servlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //�����ļ�����ҳ������������servlet public class DownloadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //request.setCharacterEncoding("UTF-8");//���ַ�ʽֻ�ܽ��post��ʽ�ύ���������ݵ������������⣬������ͨ��������get��ʽ�ύ�Ĺ����ģ��������ñ�����Ч�������ֹ�ת�� String filename=request.getParameter("filename"); //�ֶ����get��ʽ��õIJ��������������⣬ filename=new String(filename.getBytes("iso8859-1"),"UTF-8"); //�����ļ�������λ��������������ļ�����Ŀ¼(֮ǰ�ϴ����ļ��ı���Ŀ¼����hash�������õ��ļ������ڷ������˵�Ŀ¼) String path=this.getServletContext().getRealPath("/WEB-INF/upload")+File.separator+getFilePath(filename); //�ڶ��������е�����ļ�֮ǰ�������ж�һ������ļ��Ƿ��ڷ��������Ŀ¼�� File file=new File(path+File.separator+filename); if(!file.exists()){//����ļ������� request.setAttribute("message", "�Բ���,�����ļ������ڣ�"); request.getRequestDispatcher("/message.jsp").forward(request, response); return; } //�õ��ļ���ԭʼ�ļ��� //String oldname=file.getName().substring(file.getName().lastIndexOf("_")+1); String oldname=filename.substring(filename.indexOf("_")+1); //�ļ����ڣ���ʼ���ļ�������������ڴ�֮ǰ֪ͨ����������ط�ʽ�����з��͵�����(������һ��ͷ,֪ͨ����������ط�ʽ��) response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(oldname,"UTF-8")); FileInputStream in=new FileInputStream(file); //FileOutputStream out=new FileOutputStream("c:\\"+filename);//д��Ӳ�� OutputStream out=response.getOutputStream();//��ȡд�������������� int len=0; byte buffer[]=new byte[1024]; while((len=in.read(buffer))>0){ out.write(buffer, 0, len); } in.close(); } public String getFilePath(String filename){ int hashcode=filename.hashCode();//�õ��ļ�������ַ����������ڴ��еĵ�ַ32λϵͳ����һ���ĸ��ֽڵ����� int dir1=hashcode&0xf;//�û��ļ�����ϣֵ�ĺ���λ��һ���ļ�Ŀ¼ int dir2=(hashcode>>4)&0xf;//�û��ļ�����ϣֵ������λ��ȥ����λ�������ļ�����Ŀ¼ return dir1+File.separator+dir2; //���ص��������� 3/5�������ļ�·�� } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }