标签: zipoutputstream

Spring REST - 创建.zip文件并将其发送到客户端

我想创建包含我从后端接收的压缩文件的.zip文件,然后将此文件发送给用户.2天我一直在寻找答案,无法找到合适的解决方案,也许你可以帮助我:)

现在,代码是这样的:(我知道我不应该在spring控制器中完成所有操作,但不关心它,它只是为了测试目的,找到让它工作的方法)

    @RequestMapping(value = "/zip")
    public byte[] zipFiles(HttpServletResponse response) throws IOException{
        //setting headers
        response.setContentType("application/zip");
        response.setStatus(HttpServletResponse.SC_OK);
        response.addHeader("Content-Disposition", "attachment; filename=\"test.zip\"");

        //creating byteArray stream, make it bufforable and passing this buffor to ZipOutputStream
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);
        ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream);

        //simple file list, just for tests
        ArrayList<File> files = new ArrayList<>(2);
        files.add(new File("README.md"));

        //packing files
        for (File file : files) {
            //new zip entry and copying inputstream with file to zipOutputStream, after all closing …
Run Code Online (Sandbox Code Playgroud)

java rest zip spring zipoutputstream

31
推荐指数
3
解决办法
5万
查看次数

从ZipInputStream读取到ByteArrayOutputStream

我试图从a读取一个文件java.util.zip.ZipInputStream,并将其复制到一个java.io.ByteArrayOutputStream(这样我就可以创建一个java.io.ByteArrayInputStream并将其交给第三方库,最终关闭流,我不希望我ZipInputStream关闭) .

我可能在这里遗漏了一些基本内容,但我从未在这里输入while循环:

ByteArrayOutputStream streamBuilder = new ByteArrayOutputStream();
int bytesRead;
byte[] tempBuffer = new byte[8192*2];
try {
    while ((bytesRead = zipStream.read(tempBuffer)) != -1) {
        streamBuilder.write(tempBuffer, 0, bytesRead);
    }
} catch (IOException e) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我错过了哪些可以让我复制流?

编辑:

我之前应该提到这ZipInputStream不是来自文件,所以我认为我不能使用ZipFile.它来自通过servlet上传的文件.

此外,我已经调用getNextEntry()ZipInputStream之前获取此代码片段.如果我不尝试将文件复制到另一个文件中InputStream(通过OutputStream上面提到的),并且只是将文件传递ZipInputStream给我的第三方库,那么库将关闭流,而我无法做更多的事情,比如处理剩下的文件流.

java zipinputstream zipoutputstream

18
推荐指数
2
解决办法
4万
查看次数

使用ZipInputStreams和ZipOutpuStreams时,如何避免Scala中的可变变量?

我正在尝试读取一个zip文件,检查它是否有一些必需的文件,然后将所有有效文件写入另一个zip文件.java.util.zip基本介绍有很多Java主义,我很想让我的代码更加Scala-native.具体来说,我想避免使用vars.这就是我所拥有的:

val fos = new FileOutputStream("new.zip");
val zipOut = new ZipOutputStream(new BufferedOutputStream(fos));

while (zipIn.available == 1) {
  val entry = zipIn.getNextEntry
  if (entryIsValid(entry)) {
    zipOut.putNewEntry(new ZipEntry("subdir/" + entry.getName())
    // read data into the data Array
    var data = Array[Byte](1024)
    var count = zipIn.read(data, 0, 1024)
    while (count != -1) {
      zipOut.write(data, 0, count)
      count = zipIn.read(data, 0, 1024)
    }
  }
  zipIn.close
}
zipOut.close
Run Code Online (Sandbox Code Playgroud)

我应该补充说我正在使用Scala 2.7.7.

scala immutability zipinputstream zipoutputstream

16
推荐指数
1
解决办法
4132
查看次数

如何创建一个multipart zip文件并将其读回?

我如何正确地将字节压缩到a ByteArrayOutputStream然后使用ByteArrayInputStream?读取?我有以下方法:

private byte[] getZippedBytes(final String fileName, final byte[] input) throws Exception {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ZipOutputStream zipOut = new ZipOutputStream(bos);
    ZipEntry entry = new ZipEntry(fileName);
    entry.setSize(input.length);
    zipOut.putNextEntry(entry);
    zipOut.write(input, 0, input.length);
    zipOut.closeEntry();
    zipOut.close();

    //Turn right around and unzip what we just zipped
    ZipInputStream zipIn = new ZipInputStream(new ByteArrayInputStream(bos.toByteArray()));

    while((entry = zipIn.getNextEntry()) != null) {
        assert entry.getSize() >= 0;
    }

    return bos.toByteArray();
}
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,底部的断言失败,因为entry.size-1.我不明白为什么提取的实体与压缩的实体不匹配.

java zip bytearrayoutputstream bytearrayinputstream zipoutputstream

14
推荐指数
1
解决办法
2952
查看次数

将XSSFWorkbook写入zip文件

我现在有这个问题.我想在此XSSFWorkbook(工作簿)obj中将excel文件保存写入zip文件,例如(包含此example.xlsx文件的example.zip)到远程服务器.我试过以下但没有工作,它创建了一个包含zip文件中一些奇怪文件的文件夹

  XSSFWorkbook workbook = new XSSFWorkbook();
  //add some data
  Zipoutputstream zipstream=new Zipoutputstream(//destination outputstream);
  workbook.write(zipstream);
Run Code Online (Sandbox Code Playgroud)

那么有谁知道这样做的正确方法是什么?提前致谢

ps workbook.write(fileoutputstream)可以工作,但它只能作为一个平面文件写入本地磁盘,例如test.xlsx而不是我需要的zip内部.

java apache-poi zipoutputstream

12
推荐指数
2
解决办法
8513
查看次数

如何创建多个图像文件的zip文件

我正在尝试创建多个图像文件的zip文件.我已成功创建所有图像的zip文件,但不知何故所有图像都被挂起到950字节.我不知道这里出了什么问题现在我无法打开图像被压缩成那个zip文件.

这是我的代码.任何人都可以让我知道这里发生了什么?

String path="c:\\windows\\twain32";
File f=new File(path);
f.mkdir();
File x=new File("e:\\test");
x.mkdir();
byte []b;
String zipFile="e:\\test\\test.zip";
FileOutputStream fout=new FileOutputStream(zipFile);
ZipOutputStream zout=new ZipOutputStream(new BufferedOutputStream(fout));


File []s=f.listFiles();
for(int i=0;i<s.length;i++)
{
    b=new byte[(int)s[i].length()];
    FileInputStream fin=new FileInputStream(s[i]);
    zout.putNextEntry(new ZipEntry(s[i].getName()));
    int length;
    while((length=fin.read())>0)
    {
        zout.write(b,0,length);
    }
    zout.closeEntry();
    fin.close();
}
zout.close();
Run Code Online (Sandbox Code Playgroud)

java zip file fileinputstream zipoutputstream

11
推荐指数
2
解决办法
2万
查看次数

"IllegalArgumentException:UNMAPPABLE [1]",同时使用希腊字符压缩文件

我想用Windows压缩Windows(7)上的文件ZipOutputStream.问题是文件名(以及文件文件Content)也包含希腊字符(" ??0000660040140521_a.txt",Gamma和Pi).压缩我使用的文件的代码:

ZipOutputStream zipOs = new ZipOutputStream(
    new FileOutputStream("c:\\temp\\test.zip"), Charset.forName("cp737")
);

File sourceFile = new File("C:/Path/To/File/??0000660040140521_b.txt");
String entryName = sourceFile.getName().replaceAll("\\\\", "/");
ZipEntry entry = new ZipEntry(entryName);
zipOs.putNextEntry(entry);
...
...
Run Code Online (Sandbox Code Playgroud)

但是在最后一行(putNextEntry通话)我得到了IllegalArgumentException:

java.lang.IllegalArgumentException: UNMAPPABLE[1]
at java.util.zip.ZipCoder.getBytes(ZipCoder.java:95)
at java.util.zip.ZipOutputStream.writeLOC(ZipOutputStream.java:407)
at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:221)
Run Code Online (Sandbox Code Playgroud)

我假设希腊语和UTF-8之间的字符映射一定有什么问题...什么是在文件名中用希腊字符压缩文件的正确方法?

编辑

如果我使用"utf-8"作为字符集,则可以创建zip文件,但压缩文件的名称是错误的:" ðôðƒ0000660040140521_a.txt"(希腊字符丢失)

java character-encoding zipoutputstream

9
推荐指数
1
解决办法
1506
查看次数

使用AWS S3 Java将ZipOutputStream上载到S3而不将zip文件(大)临时保存到磁盘

我需要从S3下载照片(不在同一目录中),将其压缩,然后再次使用AWS S3 Java SDK上传到S3。该zip文件大小可以以GB为单位。目前,我正在使用AWS Lambda,它的临时存储限制为最大500 MB。因此,我不想将ZIP文件保存在磁盘上,而是想将ZIP文件(使用从S3下载的照片动态创建的ZIP文件)直接传输到S3。我需要使用AWS S3 Java SDK。

java amazon-s3 zipoutputstream aws-lambda aws-java-sdk

8
推荐指数
1
解决办法
333
查看次数

如何使用ZipOutputStream创建压缩的Zip存档,以便ZipEntry的方法getSize()返回正确的大小?

考虑将单个文件test_file.pdf放入zip存档test.zip然后读取此存档的代码示例:

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class Main {
    public static void main(String[] args) {
        File infile = new File("test_file.pdf");
        try (
                FileInputStream fis = new FileInputStream(infile);
                ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("test.zip"));
        ) {
            int bytesRead;
            byte[] buffer = new byte[1024];
            ZipEntry entry = new ZipEntry("data");
            entry.setSize(infile.length());

            zos.putNextEntry(entry);
            while ((bytesRead = fis.read(buffer)) >= 0)
            {
                zos.write(buffer, 0, bytesRead);
            }
            zos.closeEntry();

        } catch (IOException e) {
            e.printStackTrace();
        }

        try (
                ZipInputStream zis …
Run Code Online (Sandbox Code Playgroud)

java zipfile zipinputstream zipoutputstream java-8

7
推荐指数
1
解决办法
7967
查看次数

创建并下载Zip文件java

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

应用程序在JavaEE中使用struts和mysql完成.当用户单击下载按钮时,将调用此操作类.该代码不提供任何例外,但它也不会提示用户下载任何内容.

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

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

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 …
Run Code Online (Sandbox Code Playgroud)

java fileinputstream zipoutputstream

6
推荐指数
1
解决办法
8974
查看次数