无为清净楼资源网 Design By www.qnjia.com
本文实例讲述了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程序设计有所帮助。
标签:
jsp,Servlet,文件下载
无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com
暂无评论...
更新日志
2024年09月20日
2024年09月20日
- 群星.2022-一不小心喵上你原声大碟【TME影音】【FLAC分轨】
- 《战锤40K星际战士2》卡在正在加入服务器解决方法
- 《勇者斗恶龙怪物仙境3》玩法内容介绍
- 《幸福工厂》无限报错解决方法
- 交错战线原始交易所推荐角色一览
- 战锤40K星际战士2战术职业介绍|战术职业技能效果一览
- 战锤40K星际战士2突击职业介绍|突击职业技能效果一览
- [妙音金曲]群星《悲情咖啡屋》(黑胶)2CD[DTS-WAV]
- 阿兰·达瓦卓玛《A-Lan阿兰唯美歌姬》2CD[DTS-WAV]
- 【小提琴】陈立新《思乡曲》2004[FLAC+CUE]
- 《战地》新作明年初大规模测试!EA已内部测试一年
- 《GTAOL》PC版时隔多年更新反作弊!小助手宣布跑路
- EA称AI是其业务核心!能提高开发效率、节约成本
- 卫华.1990-太阳升【BMG】【WAV+CUE】
- 呼吸乐队.1992-THEBREATHING【深飞】【WAV+CUE】