3

我想解压缩上传到 servlet 的文件,并将所有解压缩的文件作为 byte[] 存储到 DataStore。由于 GAE 中没有文件系统,所以我必须将所有内容都放在内存中。假设我有 byte[] allzipdata 来存储原始 zip 文件数据。如何解压缩文件,尤其是如何从内存中的每个 zipentry 获取输入流?

ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(allzipdata));
ZipEntry ze = zis.getNextEntry();
while(ze!=null){
}

那么while循环中有什么?

另外,如果我上传文件,我会使用 item.getContentType(); 知道 contentType;其中 item 是 FileItemStream。那么对于一个 zipentry,有没有办法知道 contentType?

4

1 回答 1

4

要从ZipInputStream我推荐使用Apache Commons-IO库读取图像数据。它将输入流的 ZIP 条目转换为字节数组:

    ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(allzipdata));
    ZipEntry ze = null;
    while ((ze = zis.getNextEntry()) != null) {
       // write your code to use zip entry e.g. below:
       String filename = ze.getName();
       System.out.println("File Name of Entry file="+fileName);
       byte[] data = IOUtils.toByteArray(zis);
       // now work with the image `data`
    }
于 2012-11-16T23:08:44.387 回答