本文实例讲述了jsp实现Servlet文件下载的方法。分享给大家供大家参考。具体如下:
package com; import java.io.IOException; import java.io.PrintWriter; import java.net.URLEncoder; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility; /** * 文件下载类。为了防止客户端浏览器直接打开目标文件(例如在装了MS Office套件的Windows中的IE浏览器可能就会直接在IE浏览器中打开你想下载的doc或者xls文件),在响应头里加入强制下载的MIME类型。 */ public class DownloadFile extends HttpServlet { private static final Log log = LogFactory.getLog(DownloadFile.class); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { long timeStart = 0; if(log.isDebugEnabled()){ timeStart=System.currentTimeMillis(); } response.setContentType(\"application/x-download charset=UTF-8\"); java.io.FileInputStream fis = null; String filepath = request.getRealPath(\"\"); javax.servlet.ServletOutputStream sos = null; // System.out.println(\"DownloadFile filename:\" + filename); try { if(request.getParameter(\"filename\")==null ||request.getParameter(\"showName\")==null){ return; } String filename = request.getParameter(\"filename\"); String showName = request.getParameter(\"showName\"); request.setCharacterEncoding(\"UTF-8\"); response.setCharacterEncoding(\"UTF-8\"); java.io.File file = new java.io.File(filepath + filename); if (!file.exists()) { log.error(file.getAbsolutePath() + \" 文件不存在!\"); return; } // 读取文件流 fis = new java.io.FileInputStream(file); // 设置下载保存的文件名 sos = response.getOutputStream(); showName += filename.substring(filename.lastIndexOf(\".\")); String contentDisposition = \"\", browser = getBrowser(request); if (\"IE\".equals(browser)) { contentDisposition = \"attachment; filename=\" + URLEncoder.encode(showName, \"UTF-8\").replace(\"+\", \"%20\"); } else if (\"CH\".equals(browser)) { contentDisposition = \"attachment; filename=\" + MimeUtility.encodeText(showName, \"UTF8\", \"B\"); } else if (\"SF\".equals(browser)) { contentDisposition = \"attachment; filename=\" + new String(showName.getBytes(\"UTF-8\"), \"ISO8859-1\"); } else { contentDisposition = \"attachment; filename*=UTF-8\'\'\" + URLEncoder.encode(showName, \"UTF-8\").replace(\"+\", \"%20\"); } response.setHeader(\"Content-Disposition\", contentDisposition); int byteCount = 0; if (fis != null) { byte[] buff = new byte[1024]; int bytesRead; while(-1 != (bytesRead = fis.read(buff, 0, buff.length))) { sos.write(buff, 0, bytesRead); sos.flush(); byteCount += bytesRead; } } sos.flush(); if(log.isDebugEnabled()){ log.debug(\"文件下载完成,文件大小:\"+ byteCount +\",总共用时:\"+ (new Date().getTime() - timeStart) +\"毫秒。\"); } } catch(IOException ioe) { ioe.printStackTrace(); } finally { try { if(fis!=null){ fis.close(); } } catch (IOException e) { } finally { try { if(sos!=null){ sos.close(); } } catch (IOException e) { } } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(\"text/html\"); PrintWriter out = response.getWriter(); out.println(\"<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\"); out.println(\"<html>\"); out.println(\" <head>\"); out.println(\" <title>文件下载</title>\"); out.println(\" <meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=UTF-8\\\" />\"); out.println(\" </head>\"); out.println(\" <body>\"); out.print(\" This is \"); out.print(this.getClass().getName()); out.println(\", using the POST method\"); out.println(\" </body>\"); out.println(\"</html>\"); out.flush(); out.close(); } private String getBrowser(HttpServletRequest request) { String userAgent = request.getHeader(\"USER-AGENT\").toLowerCase(); if (userAgent != null) { if (userAgent.indexOf(\"msie\") >= 0) { return \"IE\"; } else if (userAgent.indexOf(\"mozilla\") >= 0) { return \"FF\"; } else if (userAgent.indexOf(\"applewebkit\") >= 0) { return \"CH\"; } else if (userAgent.indexOf(\"safari\") >= 0) { return \"SF\"; } else if (userAgent.indexOf(\"opera\") >= 0) { return \"OP\"; } } return null; } }
希望本文所述对大家的JSP程序设计有所帮助。
本文地址:https://www.stayed.cn/item/7551
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我