2

我需要编写一个代码来将字节数组转换为 zip 文件并使其在 spring MVC 中下载。字节数组来自最初是 zip 文件的 web 服务。Zip 文件有一个文件夹,该文件夹包含 2 个文件。我编写了以下代码以将字节数组转换为 zip 输入流。但我无法转换为 zip 文件。请帮助我。这是我的代码。

ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(bytes));
ZipEntry entry = null;
while ((entry = zipStream.getNextEntry()) != null) {

    String entryName = entry.getName();

    FileOutputStream out = new FileOutputStream(entryName);

    byte[] byteBuff = new byte[4096];
    int bytesRead = 0;
    while ((bytesRead = zipStream.read(byteBuff)) != -1)
    {
        out.write(byteBuff, 0, bytesRead);
    }

    out.close();
    zipStream.closeEntry();
}
zipStream.close(); 
4

1 回答 1

0

我在这里假设您想将字节数组写入 zip 文件。由于发送的数据也是一个 zip 文件,并且要保存的也是一个 zip 文件,所以应该不是问题。2个步骤,将其保存在磁盘上并返回文件。

保存在磁盘部分:

 File file = new File(/path/to/directory/save.zip);
            if (file.exists() && file.isDirectory()) {
                try {
                    OutputStream outputStream = new FileOutputStream(new File(/path/to/directory/save.zip));
                    outputStream.write(bytes);
                    outputStream.close();
                } catch (IOException ignored) {

                }
            } else { // create directory and call same code }
}

现在要取回并下载它,您需要一个控制器:

@RequestMapping(value = "/download/attachment/", method = RequestMethod.GET)
    public void getAttachmentFromDatabase(HttpServletResponse response) {
        response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getFileName() + "\"");
                    response.setContentLength(file.length);
                    FileCopyUtils.copy(file as byte-array, response.getOutputStream());
                    response.flushBuffer();
}

我已经编辑了我拥有的代码,因此您必须进行一些更改才能使其 100% 适合您。让我知道这是否是您想要的。如果没有,我将删除我的答案。享受。

于 2015-10-14T15:28:21.137 回答