jsp實(shí)現(xiàn)Servlet文件下載的方法
本文實(shí)例講述了jsp實(shí)現(xiàn)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; /** * 文件下載類。為了防止客戶端瀏覽器直接打開目標(biāo)文件(例如在裝了MS Office套件的Windows中的IE瀏覽器可能就會(huì)直接在IE瀏覽器中打開你想下載的doc或者xls文件),在響應(yīng)頭里加入強(qiáng)制下載的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); // 設(shè)置下載保存的文件名 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 +",總共用時(shí):"+ (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; } }
希望本文所述對(duì)大家的JSP程序設(shè)計(jì)有所幫助。
- 訪問JSP文件或者Servlet文件時(shí)提示下載的解決方法
- java基于servlet編寫上傳下載功能 類似文件服務(wù)器
- servlet簡(jiǎn)單實(shí)現(xiàn)文件下載的方法
- servlet實(shí)現(xiàn)文件下載的實(shí)用類分享
- Java Servlet簡(jiǎn)單實(shí)例分享(文件上傳下載demo)
- servlet監(jiān)聽實(shí)現(xiàn)統(tǒng)計(jì)在線人數(shù)功能 附源碼下載
- servlet實(shí)現(xiàn)文件上傳、預(yù)覽、下載、刪除功能
- servlet實(shí)現(xiàn)文件下載的步驟及說明詳解
- 簡(jiǎn)單實(shí)現(xiàn)Servlet文件下載功能
- Servlet實(shí)現(xiàn)代理文件下載功能
相關(guān)文章
jsp 使用jstl實(shí)現(xiàn)翻頁實(shí)例代碼
這篇文章主要介紹了jsp 使用jstl實(shí)現(xiàn)翻頁實(shí)例代碼,有需要的朋友可以參考一下2013-12-12response.getWriter().write()向前臺(tái)打印信息亂碼問題解決
本節(jié)主要介紹了response.getWriter().write()向前臺(tái)打印信息亂碼問題解決方法,需要的朋友可以參考下2014-08-08jsp中頁面之間的跳轉(zhuǎn)forward與sendRedirect的區(qū)別
頁面之間的跳轉(zhuǎn)可以通過兩種方式實(shí)現(xiàn):forward和sendRedirect;forward:可以在JSP頁面中使用,可以在Servlet中實(shí)現(xiàn),需要的朋友可以了解下2012-12-12使用MongoDB和JSP實(shí)現(xiàn)一個(gè)簡(jiǎn)單的購(gòu)物車系統(tǒng)實(shí)例
本篇文章主要介紹了使用MongoDB和JSP實(shí)現(xiàn)一個(gè)簡(jiǎn)單的購(gòu)物車系統(tǒng)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11JSP中js傳遞和解析URL參數(shù)以及中文轉(zhuǎn)碼和解碼問題
有關(guān)js傳遞和解析URL參數(shù)以及中文轉(zhuǎn)碼和解碼問題,都是在js中很常見的,下面通過示例簡(jiǎn)單為大家介紹下,感興趣的朋友可以參考下2013-10-10JSP組件commons-fileupload實(shí)現(xiàn)文件上傳
這篇文章主要為大家詳細(xì)介紹了JSP組件commons-fileupload實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10JBuilder2005單元測(cè)試之捆綁多個(gè)用例
JBuilder2005單元測(cè)試之捆綁多個(gè)用例...2006-10-10jsp+mysql數(shù)據(jù)庫(kù)操作常用方法實(shí)例總結(jié)
這篇文章主要介紹了jsp+mysql數(shù)據(jù)庫(kù)操作常用方法,以實(shí)例形式較為詳細(xì)的總結(jié)了JSP操作mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)基本的增、刪、改、查相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10