jsp中檔案下載的實現

來源:互聯網
上載者:User
 jsp中檔案下載的實現
jameslai 2006-12-22

        jsp中實現檔案下載的最簡單的方式是在網頁上做超級連結,如:<a href="music/abc.mp3">點擊下載</a>。但是這樣伺服器上的目錄資源會直接暴露給終端使用者,會給網站帶來一些不安全的因素。因此可以採用其它方式實現下載,可以採用:1、RequestDispatcher的方式進行;2、採用檔案流輸出的方式下載。

1、採用RequestDispatcher的方式進行

          jsp頁面中添加如下代碼:
         <%
    response.setContentType("application/x-download");//設定為下載application/x-download
    String filedownload = "/要下載的檔案名稱";//即將下載的檔案的相對路徑
    String filedisplay = "最終要顯示給使用者的儲存檔案名稱";//下載檔案時顯示的檔案儲存名稱
    filenamedisplay = URLEncoder.encode(filedisplay,"UTF-8");
    response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);
    
    try
    {
        RequestDispatcher dis = application.getRequestDispatcher(filedownload);
        if(dis!= null)
        {
            dis.forward(request,response);
        }
        response.flushBuffer();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
    
    }
%>

2、採用檔案流輸出的方式下載

       <%@page language="java" contentType="application/x-msdownload"  pageEncoding="gb2312"%><%
    //關於檔案下載時採用檔案流輸出的方式處理:
    //加上response.reset(),並且所有的%>後面不要換行,包括最後一個;

    response.reset();//可以加也可以不加
    response.setContentType("application/x-download");
    String filedownload = "想辦法找到要提供下載的檔案的實體路徑+檔案名稱";
    String filedisplay = "給使用者提供的下載檔案名稱";
    filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
    response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);

    OutputStream outp = null;
    FileInputStream in = null;
    try
    {
        outp = response.getOutputStream();
        in = new FileInputStream(filenamedownload);

        byte[] b = new byte[1024];
        int i = 0;

        while((i = in.read(b)) > 0)
        {
            outp.write(b, 0, i);
        }
        outp.flush();
    }
    catch(Exception e)
    {
        System.out.println("Error!");
        e.printStackTrace();
    }
    finally
    {
        if(in != null)
        {
            in.close();
            in = null;
        }
        if(outp != null)
        {
            outp.close();
            outp = null;
        }
    }
%>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.