posts - 495,comments - 227,trackbacks - 0

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

          1、采用RequestDispatcher的方式進(jìn)行

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

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

          FeedBack:
          # re: jsp中文件下載的實(shí)現(xiàn)[未登錄]
          2011-09-14 08:54 | 123
          就知道抄 全是錯的還不知道  回復(fù)  更多評論
            
          # re: jsp中文件下載的實(shí)現(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中文件下載的實(shí)現(xiàn)
          2012-04-28 09:37 |
          application.getRequestDispatcher(filedownload);
          application最好改成request




          改成request后出現(xiàn)的成了提交的jsp頁面,而不是我要的文件啊  回復(fù)  更多評論
            
          # re: jsp中文件下載的實(shí)現(xiàn)[未登錄]
          2013-04-17 17:40 | haha
          @123
          +1+1+1+1  回復(fù)  更多評論
            
          # re: jsp中文件下載的實(shí)現(xiàn)[未登錄]
          2014-01-27 17:08 | gaga
          大概過程明白  回復(fù)  更多評論
            
          # re: jsp中文件下載的實(shí)現(xiàn)
          2014-11-01 01:09 | afsd
          是的噶的發(fā)送到  回復(fù)  更多評論
            
          # re: jsp中文件下載的實(shí)現(xiàn)
          2014-11-25 12:01 | 阿大是大非說
          能不能不禍害人??  回復(fù)  更多評論
            
          主站蜘蛛池模板: 固阳县| 黑水县| 个旧市| 长治县| 元阳县| 利川市| 卓尼县| 中方县| 日喀则市| 青岛市| 犍为县| 光泽县| 绥棱县| 尤溪县| 金寨县| 阜南县| 从化市| 瑞安市| 信阳市| 徐州市| 屏东市| 威宁| 凤山县| 昌图县| 怀来县| 华阴市| 连云港市| 孟村| 新泰市| 马关县| 滨海县| 广汉市| 临海市| 陆川县| 嘉峪关市| 南安市| 招远市| 涟源市| 河源市| 个旧市| 渭源县|