posts - 495,comments - 227,trackbacks - 0

                    jsp中實現(xiàn)文件下載的最簡單的方式是在網(wǎng)頁上做超級鏈接,如:<a href="music/abc.mp3">點擊下載</a>。但是這樣服務(wù)器上的目錄資源會直接暴露給最終用戶,會給網(wǎng)站帶來一些不安全的因素。因此可以采用其它方式實現(xiàn)下載,可以采用:1、RequestDispatcher的方式進行;2、采用文件流輸出的方式下載。

          1、采用RequestDispatcher的方式進行

                      jsp頁面中添加如下代碼:
                     <%
                response.setContentType("application/x-download");//設(shè)置為下載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"%><%
                //關(guān)于文件下載時采用文件流輸出的方式處理:
                //加上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;
                    }
                }
          %>

          在wsad里面寫JSP文件下載,總是出現(xiàn)這個異常,getOutputStream() has already been called for this response,輸出流已經(jīng)被調(diào)用了.

                上網(wǎng)查半天終于明白一點,JSP早下載文件的時候用到了OutputStream,而在Application Server在處理編譯jsp時對于%>和<%之間的內(nèi)容一般是原樣輸出,而且默認是PrintWriter.

          posted on 2008-01-17 17:10 SIMONE 閱讀(34450) 評論(7)  編輯  收藏 所屬分類: JAVAJSP

          FeedBack:
          # re: jsp中文件下載的實現(xiàn)[未登錄]
          2011-09-14 08:54 | 123
          就知道抄 全是錯的還不知道  回復(fù)  更多評論
            
          # re: jsp中文件下載的實現(xiàn)
          2011-12-15 15:27 | lisatisfy
          filenamedisplay = URLEncoder.encode(filedisplay,"UTF-8");
          filenamedisplay 應(yīng)該是filedisplay
          application.getRequestDispatcher(filedownload);
          application最好改成request  回復(fù)  更多評論
            
          # re: jsp中文件下載的實現(xiàn)
          2012-04-28 09:37 |
          application.getRequestDispatcher(filedownload);
          application最好改成request




          改成request后出現(xiàn)的成了提交的jsp頁面,而不是我要的文件啊  回復(fù)  更多評論
            
          # re: jsp中文件下載的實現(xiàn)[未登錄]
          2013-04-17 17:40 | haha
          @123
          +1+1+1+1  回復(fù)  更多評論
            
          # re: jsp中文件下載的實現(xiàn)[未登錄]
          2014-01-27 17:08 | gaga
          大概過程明白  回復(fù)  更多評論
            
          # re: jsp中文件下載的實現(xiàn)
          2014-11-01 01:09 | afsd
          是的噶的發(fā)送到  回復(fù)  更多評論
            
          # re: jsp中文件下載的實現(xiàn)
          2014-11-25 12:01 | 阿大是大非說
          能不能不禍害人??  回復(fù)  更多評論
            
          主站蜘蛛池模板: 松江区| 祁连县| 绍兴县| 左云县| 松阳县| 绥江县| 临夏县| 梁山县| 昆明市| 肇东市| 凤城市| 东台市| 宝山区| 永新县| 温州市| 淮阳县| 淅川县| 磐石市| 鄯善县| 台南县| 香格里拉县| 绥中县| 台东县| 阆中市| 龙南县| 墨玉县| 柳州市| 桦南县| 兴文县| 东港市| 色达县| 江都市| 荔波县| 杭锦后旗| 景谷| 文成县| 新乡市| 中山市| 轮台县| 阿瓦提县| 玉田县|