赞
踩
实现将指定的多个文件打包成一个压缩文件下载。
- <dependencies>
- <!-- Spring Web -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <!-- Apache Commons IO -->
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- </dependency>
- <!-- Apache Commons Compress -->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- </dependency>
- </dependencies>
- import org.apache.commons.compress.archivers.ArchiveEntry;
- import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
- import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
- import org.springframework.http.HttpHeaders;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.ResponseEntity;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
-
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.List;
-
- @RestController
- public class FileDownloadController {
-
- @GetMapping("/download")
- public ResponseEntity<byte[]> downloadFiles(@RequestParam List<String> fileNames) throws IOException {
- // 创建临时压缩文件
- File zipFile = File.createTempFile("download", ".zip");
- try (FileOutputStream fos = new FileOutputStream(zipFile);
- ZipArchiveOutputStream zos = new ZipArchiveOutputStream(fos)) {
-
- for (String fileName : fileNames) {
- File fileToZip = new File(fileName);
- FileInputStream fis = new FileInputStream(fileToZip);
- ArchiveEntry entry = new ZipArchiveEntry(fileToZip.getName());
- zos.putArchiveEntry(entry);
- byte[] buffer = new byte[1024];
- int len;
- while ((len = fis.read(buffer)) > 0) {
- zos.write(buffer, 0, len);
- }
- fis.close();
- zos.closeArchiveEntry();
- }
-
- zos.finish();
- }
-
- // 设置HTTP响应头
- HttpHeaders headers = new HttpHeaders();
- headers.add("Content-Disposition", "attachment; filename=download.zip");
-
- // 读取压缩文件内容并返回给客户端
- byte[] fileData = org.apache.commons.io.FileUtils.readFileToByteArray(zipFile);
-
- return ResponseEntity
- .status(HttpStatus.OK)
- .headers(headers)
- .body(fileData);
- }
- }
http://localhost:8080/download?fileNames=/path/to/file1.txt&fileNames=/path/to/file2.txt
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。