2016-05-25 5 views
3

私のアプリケーションには、特定の入札に関する文書(pdf)がありません。私はそれらのpdfファイルからzipファイルを作成し、それをダウンロードできるようにする必要があります。Zipファイルを作成してダウンロードするjava

アプリケーションは、strutsおよびmysqlを使用してJavaEEで実行されます。 ユーザーがダウンロードボタンをクリックすると、このアクションクラスが呼び出されます。 コードには例外はありませんが、ダウンロードするようにユーザーに指示するものではありません。

コード内の誤りを見つけるのを手伝ってください。続き

.... ..私のアクションクラスのソースコードである私はちょうど適切なパスを与え、それをダウンロードする必要がありました...そこにすでにました:)完了

public class ActDownloadDocZip extends Action { 
static Logger logger = Logger.getLogger(ActDownloadDocZip.class); 

public ActionForward execute(ActionMapping mapping, ActionForm form, 
     HttpServletRequest request, HttpServletResponse response) 
     throws Exception { 
    String realPath = getServlet().getServletContext().getRealPath(
      "/WEB-INF/log4jConfiguration.xml"); 
    DOMConfigurator.configure(realPath); 
    logger.info("In ActDownloadDocZip...."); 
    ActionForward forward = null; 
    HttpSession session = request.getSession(); 
    // get a db connection 
    Connection conn = null; 
    String[][] nameFile = null; 
    String tenderNo = ""; 
    try { 
     conn = ProxoolConnection.getProxoolConnectionSLT(); 
     tenderNo = request.getParameter("tenderNo"); 
     // File fileex=new File("xxx.zip"); 
     FileOutputStream zipFile = new FileOutputStream(new File("xxx.zip")); 
     ZipOutputStream output = new ZipOutputStream(zipFile); 
     // call getPdfFiles method here 
     ILoadTenders ld = new LoadTenders(); 
     nameFile = ld.getPdfFileListToTender(conn, tenderNo);//this method brings back the relevant pdf file names and paths((pdfname1,pdfpath1),(pdfname2,pdfpath2)) 
     for (int i = 0; i < nameFile.length; i++) { 
      ZipEntry zipEntry = new ZipEntry(nameFile[i][0].trim()); 
      output.putNextEntry(zipEntry); 
      FileInputStream pdfFile = new FileInputStream(new File(
        nameFile[i][1].trim())); 
      IOUtils.copy(pdfFile, output); 
      pdfFile.close(); 
      output.closeEntry(); 
     } 
     output.finish(); 
     output.close(); 
    } catch (SQLException e) { 
     System.out.println("actDownloadDocZip " + e); 
     logger.fatal(e.getMessage()); 
    } catch (Exception e) { 
     System.out.println("actDownloadDocZip1 " + e); 
     logger.fatal(e.getMessage()); 
    } finally { 
     if (conn != null) { 
      ProxoolConnection.closeProxoolConnectionSLT(conn); 
     } 
    } 
    forward = mapping.findForward("publicdashboard"); 
    return forward; 
    } 
} 

答えて

0

ここで再び行動クラス:

package com.affno.etender.frontend; 

import java.io.BufferedOutputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.sql.Connection; 
import java.sql.SQLException; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipFile; 
import java.util.zip.ZipOutputStream; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import org.apache.commons.io.IOUtils; 
import org.apache.log4j.Logger; 
import org.apache.log4j.xml.DOMConfigurator; 
import org.apache.struts.action.Action; 
import org.apache.struts.action.ActionForm; 
import org.apache.struts.action.ActionForward; 
import org.apache.struts.action.ActionMapping; 
import org.apache.struts.util.MessageResources; 

import com.affno.util.proxool.ProxoolConnection; 

public class ActDownloadDocZip extends Action { 
    static Logger logger = Logger.getLogger(ActDownloadDocZip.class); 

    public ActionForward execute(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response) 
      throws Exception { 

     String realPath = getServlet().getServletContext().getRealPath(
       "/WEB-INF/log4jConfiguration.xml"); 
     DOMConfigurator.configure(realPath); 
     logger.info("In ActDownloadDocZip...."); 

     ActionForward forward = null; 
     HttpSession session = request.getSession(); 

     // get a db connection 
     Connection conn = null; 

     String[][] nameFile = null; 

     String tenderNo = ""; 

     //// 
     FileOutputStream fos = null; 
     ZipOutputStream zipOut = null; 
     FileInputStream fis = null; 

     MessageResources messages = MessageResources.getMessageResources("resources.Upload"); 
     String dirzip = messages.getMessage("save.dir"); 
     tenderNo = request.getParameter("tenderNo").trim(); 
     String zipFolderName =tenderNo + ".zip"; 
     String filepathzipped = dirzip + zipFolderName; 

     try { 
      conn = ProxoolConnection.getProxoolConnectionSLT(); 



      fos = new FileOutputStream(filepathzipped); 
      zipOut = new ZipOutputStream(new BufferedOutputStream(fos)); 

      ILoadTenders ld = new LoadTenders(); 
      nameFile = ld.getPdfFileListToTender(conn, tenderNo); 

      for (int i = 0; i < nameFile.length; i++){ 
       File input = new File(nameFile[i][1].trim()); 
       fis = new FileInputStream(input); 
       ZipEntry ze = new ZipEntry(input.getName()); 
       System.out.println("Zipping the file: "+input.getName()); 
       zipOut.putNextEntry(ze); 
       byte[] tmp = new byte[4*1024]; 
       int size = 0; 
       while((size = fis.read(tmp)) != -1){ 
        zipOut.write(tmp, 0, size); 
       } 
       zipOut.flush(); 
       fis.close(); 
      } 
      zipOut.close(); 
      System.out.println("Done... Zipped the files..."); 
      //zip created 

      //downloading the zip 
      File file = new File(filepathzipped); 
      if(!file.exists()){ 
       System.out.println("file not found"); 
      } 
      response.setContentType("APPLICATION/OCTET-STREAM"); 
      response.setHeader("Content-Disposition","attachment; filename=\"" + zipFolderName + "\""); 

      OutputStream out = response.getOutputStream(); 
      FileInputStream in = new FileInputStream(file); 
      byte[] buffer = new byte[4096]; 
      int length; 
      while ((length = in.read(buffer)) > 0){ 
       out.write(buffer, 0, length); 
      } 
      in.close(); 
      out.flush(); 

     } 
     //// 
     catch (SQLException e) { 
      System.out.println("actDownloadDocZip " + e); 
      logger.fatal(e.getMessage()); 
     } catch (Exception e) { 
      System.out.println("actDownloadDocZip1 " + e); 
      logger.fatal(e.getMessage()); 
     } finally { 
      if (conn != null) { 
       ProxoolConnection.closeProxoolConnectionSLT(conn); 
      } 
     } 

     forward = mapping.findForward("publicdashboard"); 
     /* 
     * if (forward != null) { forward = new ActionForward(forward.getPath() 
     * +"servlet/DownloadServlet?" + zipFile, true); } 
     */ 
     return forward; 

    } 
} 
関連する問題