posts - 495,comments - 227,trackbacks - 0

                    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;
                    }
                }
          %>

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

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

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

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




          改成request后出現的成了提交的jsp頁面,而不是我要的文件啊  回復  更多評論
            
          # re: jsp中文件下載的實現[未登錄]
          2013-04-17 17:40 | haha
          @123
          +1+1+1+1  回復  更多評論
            
          # re: jsp中文件下載的實現[未登錄]
          2014-01-27 17:08 | gaga
          大概過程明白  回復  更多評論
            
          # re: jsp中文件下載的實現
          2014-11-01 01:09 | afsd
          是的噶的發送到  回復  更多評論
            
          # re: jsp中文件下載的實現
          2014-11-25 12:01 | 阿大是大非說
          能不能不禍害人??  回復  更多評論
            
          主站蜘蛛池模板: 万州区| 湾仔区| 新巴尔虎左旗| 密山市| 巴楚县| 清流县| 留坝县| 旬阳县| 二连浩特市| 鄂州市| 榕江县| 册亨县| 六枝特区| 江孜县| 玉溪市| 凯里市| 灵宝市| 广丰县| 慈溪市| 长子县| 华坪县| 吉首市| 兰西县| 永德县| 交口县| 拉孜县| 大安市| 大足县| 包头市| 汶上县| 洛扎县| 邮箱| 修武县| 黄龙县| 荃湾区| 桃园市| 额济纳旗| 扬中市| 同江市| 宁武县| 西丰县|