jsp实现Servlet文件下载的方法
程序员文章站
2022-05-03 15:33:10
本文实例讲述了jsp实现servlet文件下载的方法。分享给大家供大家参考。具体如下:
package com;
import java.io.ioexcept...
本文实例讲述了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程序设计有所帮助。