posts - 241,  comments - 116,  trackbacks - 0
          功能:zip文件下載
          簡述:
          1.根據畫面上的復選框進行文件打包下載
          2.待下載文件保存在服務器的硬盤上,打包過程中不生成臨時文件
          3.打包過程中需要動態創建一個txt文件一并打進zip包中
          4.頁面上沒有文件被選擇的場合,按下【下載】按鈕后,什么都不做(不刷新頁面)

          部分內容參考自互聯網,如果錯誤,歡迎指正。
          Struts配置文件
          <!-- 數據下載Action -->
          <action name="downZip" class="DownloadAction">
              <result name="nodata" type="httpheader">
                  <param name="status">sky7034</param>
              </result>
          </action>
          Action代碼
              private OutputStream res;
              private ZipOutputStream zos;

              // action的主方法
              public String execute() throws Exception {
                  
                  if (有數據可下載) {;
                      // 預處理
                      preProcess();

                  } else {
                      // 沒有文件可下載的場合,返回nodata,設定參照struts配置文件
                      return "nodata";
                  }

                  // 在這里編輯好需要下載的數據風之境地
                  // 文件可以是硬盤上的
                  // 文件也可以是自己寫得數據流,如果是自己寫得數據流,請參看outputZipFile方法中的【2.】
                  File file = new File();
                  file = ...
                  outputZipFile(file);
                  
                  // 后處理
                  afterProcess();
                  
                  return null;

              }

              // 預處理
              public void preProcess() throws Exception {
                  
                  HttpServletResponse response = ServletActionContext.getResponse();
                  
                  res = response.getOutputStream();

                  //清空輸出流
                  response.reset();   

                  //設定輸出文件頭
                  response.setHeader("Content-disposition ","attachment; filename=a.zip ");   
                  response.setContentType("application/zip");
                  zos = new ZipOutputStream(res);
                  
              }

              // 后處理
              public void afterProcess() throws Exception {
                  zos.close();
                  res.close();
              }

              // 寫文件到客戶端
              private void outputZipFile(File file) throws IOException, FileNotFoundException {
                  ZipEntry ze = null;
                  byte[] buf = new byte[1024];
                  
                  int readLen = 0;
                  
                  // 1.動態壓縮一個File到zip中
                  // 創建一個ZipEntry,并設置Name和其它的一些屬性
                  // 壓縮包中的路徑和文件名稱
                  ze = new ZipEntry("1\\1\\" + file.getName());
                  ze.setSize(file.length());
                  ze.setTime(file.lastModified());

                  // 將ZipEntry加到zos中,再寫入實際的文件內容
                  zos.putNextEntry(ze);
                  InputStream is = new BufferedInputStream(new FileInputStream(file));

                  // 把數據寫入到客戶端
                  while ((readLen = is.read(buf, 0, 1024)) != -1) {
                      zos.write(buf, 0, readLen);
                  }
                  is.close();
                  
                  // 2.動態壓縮一個String到zip中
                  String customFile = "This is a text file.";

                  // 壓縮包中的路徑和文件名稱
                  ZipEntry cze = new ZipEntry(“1\\1\\” + "Test.txt");
                  zos.putNextEntry(cze);

                  // 利用ByteArrayInputStream把流數據寫入到客戶端
                  is = new ByteArrayInputStream(customFile.getBytes());
                  while ((readLen = is.read(buf, 0, 1024)) != -1) {
                      zos.write(buf, 0, readLen);
                  }
                  
              }
          posted on 2012-01-10 09:12 墻頭草 閱讀(3548) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 和田县| 邯郸市| 雅安市| 江西省| 梓潼县| 浮山县| 邯郸市| 永清县| 大石桥市| 榆树市| 云龙县| 吉林省| 舟山市| 南京市| 茶陵县| 西贡区| 上饶市| 宁城县| 阳江市| 商洛市| 莆田市| 云南省| 富锦市| 阳西县| 仁布县| 平定县| 福建省| 宁海县| 襄樊市| 陆丰市| 平远县| 黄冈市| 鹿邑县| 鲁山县| 扬中市| 周口市| 娄烦县| 丁青县| 肥东县| 平谷区| 莱西市|