//文件下载 @WebServlet("/down") public class DownLoadServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //0.跳过权限检查和积分检查 //1.获取被下载的资源文件名称 String filename = req.getParameter("fileName"); System.out.println(filename); if (filename != null && "".equals(filename.trim())) { //对获取到的参数进行重新编码,因为可能会有中文乱码的问题 filename = new String(filename.getBytes("ISO-8859-1"), "utf-8"); System.out.println(filename); } //2.从服务器中找到被下载资源的绝对路径 String path = req.getServletContext().getRealPath("/WEB-INF/download/" + filename); System.out.println(path); // ---------------------------------------------------------------------------------------- //2.1告诉浏览器不要直接打开文件,而是弹出下载框,保存文件 resp.setContentType("application/x-msdownload"); //2.2应该设置下载文件的建议保存名称 //--------------------------------------------------------------------------------- String useragent = req.getHeader("User-Agent"); //下面两种方式谷歌浏览器全部都支持 if (useragent.contains("MSIE")) { //filename = URLEncoder.encode(filename, "UTF-8"); //System.out.println(filename); // IE浏览器的处理方式: resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); } else { //非IE浏览器的处理方式: //resp.setHeader("Content-Disposition", "attachment;filename="+(new String(filename.getBytes("utf-8"), "ISO-8859-1"))); filename = new String(filename.getBytes("utf-8"), "ISO-8859-1"); System.out.println(filename); } //--------------------------------------------------------------------------------- // 3.磁盘文件-->程序中-->响应给用户 Files.copy(Paths.get(path), resp.getOutputStream()); } }