我正在创建一个网站。我的两个文件位于不同的位置,我想将这两个文件压缩成一个zip文件。如果我单击下载选项,则可以将两个不同位置的文件下载到单个zip文件中并提供给用户。如何在JSP中实现?
我在jsp中尝试过,但我不知道该怎么做......
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.io.BufferedReader,java.io.IOException,java.io.InputStreamReader,java.util.Enumeration,java.util.zip.*,java.util.zip.ZipFile"%>
<html>
<body>
<%
//getting the zip file path
String path=request.getParameter("path");
response.setContentType("application/zip");
//response.setHeader("Content-Disposition", "attachment; filename=\"" + path + "\"");
byte[] _buf = new byte[1024];
//zos is used to write files in zip
ZipOutputStream zos = null;
//zip is used to read files
ZipInputStream zis = null;
boolean bsuccess = true;
zos = new ZipOutputStream(new java.io.FileOutputStream("D:/temp/SSO.zip"));
zis = new ZipInputStream(new java.io.FileInputStream(path));
ZipEntry ze = null;
while ((ze = zis.getNextEntry()) != null)
{
String fname = ze.getName();
if (fname!=null)
{
//copy the entry from zis to zos
int bytes = 0;
//deal with password protected files
zos.putNextEntry(new ZipEntry(fname));
while ((bytes = zis.read(_buf)) > 0)
{
zos.write(_buf, 0, bytes);
}
zis.closeEntry();
zos.closeEntry();
}
}
if (zis != null)
zis.close();
if (zos != null)
zos.close();
%>
答案 0 :(得分:0)
您缺少将zip文件写入response.getOutputStream()的部分,顺便说一下,您还没有在页面上打印任何内容。如果你已经打印了东西,你会收到一个错误,即已经调用了response.getOutputStream()。
换句话说,取出
<html>
<body>
替换:
zos = new ZipOutputStream(new java.io.FileOutputStream("D:/temp/SSO.zip"));
使用:
zos = new ZipOutputStream(response.getOutputStream());