创建并下载 Zip 文件 java
create and download the Zip file java
在我的申请中没有特定投标的文件(pdf)。我需要从这些 pdf 文件创建一个 zip 文件并允许用户下载它。
使用 struts 和 mysql 在 JavaEE 中完成应用程序。
当用户单击下载按钮时,将调用此操作 class。
该代码没有给出任何例外,但也不会提示用户下载任何内容。
请帮我找出代码中的错误。
以下是我的动作源码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;
}
}
完成 :) 我已经在那里了...只需提供正确的路径并下载它....
此处再次执行操作 class:
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;
}
}
- 下载报告时拦截请求复制下载url并点击
- 防止直接访问url下载任何文件
的代码
实施
if (param.equals("downloadfile")) {
session = request.getSession();
relativePath = request.getRealPath("/");
String filePathName = relativePath + "FILES\EXCEL\ASC_Mapping_" + user.getLoginID() + ".zip";
System.out.println("guddu 1 " + filePathName);
if (filePathName == null || filePathName.equals("")) {
throw new ServletException("File Name can't be null or empty");
}
File file1 = new File(filePathName);
if (!file1.exists()) {
throw new ServletException("File doesn't exists on server.");
}
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment;filename=ASC_Mapping_" + user.getLoginID() + ".zip");
FileInputStream fileInputStream = new FileInputStream(file1);
OutputStream os = response.getOutputStream();
byte[] bufferData = new byte[4096];
int read = 0;
while ((read = fileInputStream.read(bufferData)) > 0) {
os.write(bufferData, 0, read);
}
os.close();
fileInputStream.close();
response.flushBuffer();
}
在我的申请中没有特定投标的文件(pdf)。我需要从这些 pdf 文件创建一个 zip 文件并允许用户下载它。
使用 struts 和 mysql 在 JavaEE 中完成应用程序。 当用户单击下载按钮时,将调用此操作 class。 该代码没有给出任何例外,但也不会提示用户下载任何内容。
请帮我找出代码中的错误。
以下是我的动作源码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;
}
}
完成 :) 我已经在那里了...只需提供正确的路径并下载它....
此处再次执行操作 class:
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;
}
}
- 下载报告时拦截请求复制下载url并点击
- 防止直接访问url下载任何文件 的代码
实施
if (param.equals("downloadfile")) {
session = request.getSession();
relativePath = request.getRealPath("/");
String filePathName = relativePath + "FILES\EXCEL\ASC_Mapping_" + user.getLoginID() + ".zip";
System.out.println("guddu 1 " + filePathName);
if (filePathName == null || filePathName.equals("")) {
throw new ServletException("File Name can't be null or empty");
}
File file1 = new File(filePathName);
if (!file1.exists()) {
throw new ServletException("File doesn't exists on server.");
}
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment;filename=ASC_Mapping_" + user.getLoginID() + ".zip");
FileInputStream fileInputStream = new FileInputStream(file1);
OutputStream os = response.getOutputStream();
byte[] bufferData = new byte[4096];
int read = 0;
while ((read = fileInputStream.read(bufferData)) > 0) {
os.write(bufferData, 0, read);
}
os.close();
fileInputStream.close();
response.flushBuffer();
}