ZipOutputStream压缩文件返回到前端页面下载
时间: 2023-08-25 11:10:01 浏览: 121
要实现这个功能,你可以按照以下步骤:
1. 创建一个 `ZipOutputStream` 对象,并指定要压缩的文件。
```java
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
```
2. 循环遍历要压缩的文件列表,将每个文件添加到压缩文件中。
```java
for (File file : fileList) {
zipOut.putNextEntry(new ZipEntry(file.getName()));
FileInputStream fileIn = new FileInputStream(file);
IOUtils.copy(fileIn, zipOut);
fileIn.close();
zipOut.closeEntry();
}
```
这里使用了 `IOUtils.copy()` 方法来将文件内容复制到 `ZipOutputStream` 对象中。
3. 设置响应头,让浏览器将压缩文件作为附件下载。
```java
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\"compressed.zip\"");
```
4. 关闭 `ZipOutputStream` 对象并刷新响应。
```java
zipOut.flush();
zipOut.close();
response.flushBuffer();
```
完整的示例代码如下:
```java
@RequestMapping("/download")
public void download(HttpServletResponse response) throws IOException {
List<File> fileList = getFileList(); // 获取要压缩的文件列表
// 设置响应头
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\"compressed.zip\"");
// 创建 ZipOutputStream 对象
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
// 将每个文件添加到压缩文件中
for (File file : fileList) {
zipOut.putNextEntry(new ZipEntry(file.getName()));
FileInputStream fileIn = new FileInputStream(file);
IOUtils.copy(fileIn, zipOut);
fileIn.close();
zipOut.closeEntry();
}
// 关闭 ZipOutputStream 对象并刷新响应
zipOut.flush();
zipOut.close();
response.flushBuffer();
}
```
请注意,在上面的示例代码中,`getFileList()` 方法返回一个 `List<File>` 对象,其中包含要压缩的文件列表。你需要根据实际情况编写此方法。
阅读全文