<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java快速開發(fā)平臺(tái)

    www.fastunit.com

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      23 Posts :: 0 Stories :: 273 Comments :: 0 Trackbacks

    一、如何使用

    如果此Servlet命名為download,請(qǐng)求的URL為:/download?path=xxx,請(qǐng)求后出現(xiàn)下載窗口:

    download.gif

    二、源碼

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;

    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class FileDownload extends HttpServlet {

      
    protected void service(HttpServletRequest req, HttpServletResponse res)
          
    throws ServletException, IOException {

        
    // 服務(wù)器相對(duì)路徑
        String path = req.getParameter("path");
        
    // 服務(wù)器絕對(duì)路徑
        path = getServletContext().getRealPath("/"+ path;

        
    // 檢查文件是否存在
        File obj = new File(path);
        
    if (!obj.exists()) {
          res.setContentType(
    "text/html;charset=GBK");
          res.getWriter().print(
    "指定文件不存在!");
          
    return;
        }

        
    // 讀取文件名:用于設(shè)置客戶端保存時(shí)指定默認(rèn)文件名
        int index = path.lastIndexOf("\\"); // 前提:傳入的path字符串以“\”表示目錄分隔符
        String fileName = path.substring(index + 1);

        
    // 寫流文件到前端瀏覽器
        ServletOutputStream out = res.getOutputStream();
        res.setHeader(
    "Content-disposition""attachment;filename=" + fileName);
        BufferedInputStream bis 
    = null;
        BufferedOutputStream bos 
    = null;
        
    try {
          bis 
    = new BufferedInputStream(new FileInputStream(path));
          bos 
    = new BufferedOutputStream(out);
          
    byte[] buff = new byte[2048];
          
    int bytesRead;
          
    while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
            bos.write(buff, 
    0, bytesRead);
          }
        } 
    catch (IOException e) {
          
    throw e;
        } 
    finally {
          
    if (bis != null)
            bis.close();
          
    if (bos != null)
            bos.close();
        }
      }

    }

    三、web.xml配置

    <servlet>
        
    <servlet-name>FileDownload</servlet-name>
        
    <servlet-class>com.fastunit.test.FileDownload</servlet-class>
    </servlet>
    <servlet-mapping>
        
    <servlet-name>FileDownload</servlet-name>
        
    <url-pattern>/download</url-pattern>
    </servlet-mapping>

    四、補(bǔ)充說明

    本例只是一個(gè)簡單實(shí)現(xiàn),應(yīng)用時(shí)需要在實(shí)際環(huán)境中處理以下問題:
    1. 權(quán)限問題:結(jié)合實(shí)際系統(tǒng)增加用戶權(quán)限控制
    2. 中文文件名:中文問題與運(yùn)行環(huán)境有關(guān),不同環(huán)境下解決方式也有差異,一般可通過轉(zhuǎn)碼來解決。
    3. 文件類型:文件類型統(tǒng)一時(shí)可直接指定,如res.setContentType("application/zip");文件類型不確定時(shí)可不設(shè)、設(shè)一個(gè)不存在的、或通過解析文件名后綴來設(shè)置,以實(shí)際測試通過為準(zhǔn)。

    posted on 2008-01-22 14:26 FastUnit 閱讀(12010) 評(píng)論(4)  編輯  收藏 所屬分類: Java

    Feedback

    # re: Servlet實(shí)現(xiàn)文件下載的源碼 2008-01-23 18:15 stoneshao
    需要修正的幾個(gè)地方:
    1。中文文件名亂碼
    2。mime的信息  回復(fù)  更多評(píng)論
      

    # re: Servlet實(shí)現(xiàn)文件下載的源碼 2008-01-24 19:39 FastUnit
    @stoneshao
    原文不夠嚴(yán)謹(jǐn),這兩點(diǎn)確實(shí)是關(guān)鍵之處,已根據(jù)你的提議在文中增加了補(bǔ)充說明。  回復(fù)  更多評(píng)論
      

    # re: Servlet實(shí)現(xiàn)文件下載的源碼 2010-06-13 14:15 一個(gè)好人
    如果文件的大小超過50M,這個(gè)好像行不通吧  回復(fù)  更多評(píng)論
      

    # re: Servlet實(shí)現(xiàn)文件下載的源碼[未登錄] 2014-03-18 13:32 java愛好者
    把流文件不寫到前端瀏覽器而是用戶自己指定的文件如何改啊
    急求救
      回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 小草在线看片免费人成视久网| 国产精品国产自线拍免费软件| 香蕉大伊亚洲人在线观看| 亚洲AV永久无码精品一区二区国产 | 免费无码又爽又刺激高潮视频| 亚洲fuli在线观看| 亚洲精品无码久久久| 久久精品国产免费观看| 国产精品亚洲色婷婷99久久精品| 亚洲国产精品无码久久SM| 成人免费视频网址| 中文无码成人免费视频在线观看| 亚洲日日做天天做日日谢| 亚洲精品无码久久久久| 免费高清小黄站在线观看| 免费黄色电影在线观看| 国产亚洲精彩视频| 亚洲欧洲日产国码www| 国产亚洲精品无码专区| 成人性生免费视频| 亚洲美女免费视频| 久久精品国产免费| 黄页视频在线观看免费| 2020年亚洲天天爽天天噜| 亚洲国产成人一区二区精品区 | 国产成人3p视频免费观看| 日韩人妻无码精品久久免费一| 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲综合中文字幕无线码| 亚洲一区二区三区高清| 精品亚洲一区二区三区在线播放| 女人张开腿等男人桶免费视频| 日韩人妻无码精品久久免费一| 插鸡网站在线播放免费观看| 国产大陆亚洲精品国产| 中文字幕 亚洲 有码 在线 | 亚洲视频在线免费看| 亚洲老妈激情一区二区三区| 亚洲人午夜射精精品日韩| 日韩精品电影一区亚洲| 国产精品免费看久久久久|