package org.codepackage.file import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class for Servlet: Downfile * */ public class Downfile extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L; /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#HttpServlet() */ public Downfile() { super(); } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doprocess(request,response); } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doprocess(request,response); } private void doprocess(HttpServletRequest request, HttpServletResponse response) throws IOException{// 实现文件下载 String aa=request.getParameter("file"); String fileName=new String(aa.getBytes("ISO-8859-1"),"UTF-8"); // 解决href传入参数中含有中文,乱码的问题 File file=new File(fileName); PrintWriter out=response.getWriter(); if(!file.exists()){ // 文件不存在 fileName=response.encodeURL(new String(fileName.getBytes(),"ISO8859_1")); out.write("<mce:script type="text/javascript"><!-- alert('"+fileName+" "+response.encodeURL(new String("不存在".getBytes(),"ISO8859_1"))+"');window.location.href='AllFiles.do'; // --></mce:script>"); }else{ fileName=response.encodeURL(new String(fileName.getBytes(),"ISO8859_1"));//转码,解决文件名中有中文出现无法下载的情况 response.setHeader("Content-Disposition", "attachment; filename=/""+fileName+"/""); response.setContentType("application/octet-stream"); response.setCharacterEncoding("utf-8"); FileReader fileReader = new FileReader(file); BufferedReader br=new BufferedReader(fileReader); String str=br.readLine(); while(str!=null){ out.write(str+"/n"); str=br.readLine(); } } out.flush(); out.close(); return; } }