jsp實現Servlet檔案下載的方法_JSP編程

來源:互聯網
上載者:User

本文執行個體講述了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程式設計有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.