Java ZipOutputStream转ByteArrayOutputStream进行下载
时间: 2023-10-22 19:07:21 浏览: 51
你可以使用 Java 的 ZipOutputStream 类来压缩文件并将其写入 ByteArrayOutputStream。然后你可以将 ByteArrayOutputStream 中的数据作为字节数组发送给客户端进行下载。
下面是一个示例代码:
```java
public byte[] compressFilesToByteArray(List<File> files) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ZipOutputStream zos = new ZipOutputStream(baos)) {
for (File file : files) {
zos.putNextEntry(new ZipEntry(file.getName()));
try (FileInputStream fis = new FileInputStream(file)) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
}
zos.closeEntry();
}
}
return baos.toByteArray();
}
```
在这个示例中,我们将文件列表作为参数传递给 `compressFilesToByteArray` 方法。该方法使用 `ZipOutputStream` 将文件压缩并写入 `ByteArrayOutputStream` 中。最后,该方法返回 `ByteArrayOutputStream` 中的字节数组。
你可以使用以下代码将字节数组作为响应发送给客户端:
```java
byte[] compressedBytes = compressFilesToByteArray(files);
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\"download.zip\"");
response.setContentLength(compressedBytes.length);
response.getOutputStream().write(compressedBytes);
response.getOutputStream().flush();
```
在这个示例中,我们设置了响应的内容类型为 `application/zip`。我们还设置了一个 `Content-Disposition` 头来指定响应的文件名为 `download.zip`。最后,我们将字节数组写入响应的输出流并刷新输出流。
阅读全文