servlet文件下載類,為了防止客戶端瀏覽器直接打開目標文件,在響應頭里加入強制下載的MIME類型,大家參考使用吧
代碼如下: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("新聞熱點
疑難解答