创建并下载Java Zip文件 [英] create and download the Zip file java

查看:58
本文介绍了创建并下载Java Zip文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的申请中没有任何特定招标的文件(pdf).我需要从这些pdf文件创建一个zip文件,并允许用户下载它.

In my application there are no of documents(pdf) for a particular tender. I need to create a zip file from those pdf files and allow user to download it.

应用程序是在JavaEE中使用struts和mysql完成的.当用户单击下载按钮时,将调用此动作类.该代码没有给出任何异常,但也不会提示用户下载任何内容.

Application is done in JavaEE with struts and mysql. when user clicks the download button this action class gets called. The code does not give any exceptions but it does not prompt user to download anything either.

请帮助我找到代码中的错误.

Please help me find what is wrong in the code.

以下是我的动作类的源代码.

Following is the source code of my action class..

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

推荐答案

完成:)我已经在那儿了……只需要提供正确的路径并下载它即可....

Done :) I was already there... just had to give a proper path and download it....

再次在这里进行动作课:

Here the action class again:

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

这篇关于创建并下载Java Zip文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆