posts - 241,  comments - 116,  trackbacks - 0
          功能:zip文件下載
          簡述:
          1.根據畫面上的復選框進行文件打包下載
          2.待下載文件保存在服務器的硬盤上,打包過程中不生成臨時文件
          3.打包過程中需要動態(tài)創(chuàng)建一個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.動態(tài)壓縮一個File到zip中
                  // 創(chuàng)建一個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.動態(tài)壓縮一個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 墻頭草 閱讀(3554) 評論(0)  編輯  收藏

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


          網站導航:
           
          人人游戲網 軟件開發(fā)網 貨運專家
          主站蜘蛛池模板: 定安县| 潼南县| 句容市| 长汀县| 凌源市| 二连浩特市| 巫溪县| 淮南市| 银川市| 东海县| 阜康市| 濉溪县| 昌乐县| 时尚| 松桃| 麟游县| 文水县| 镇沅| 阜城县| 怀来县| 浪卡子县| 三台县| 茂名市| 济宁市| 肥西县| 霸州市| 巴中市| 宜宾县| 木兰县| 长武县| 青冈县| 囊谦县| 广丰县| 迁西县| 台州市| 墨竹工卡县| 依兰县| 兰西县| 冷水江市| 开远市| 武胜县|