在Spring Boot中實現文件打包下載功能,可以使用以下步驟:
pom.xml
文件中添加以下依賴:<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
@RestController
和@RequestMapping
注解。例如:@RestController
@RequestMapping("/download")
public class DownloadController {
@GetMapping("/zip")
public ResponseEntity<Resource> downloadZip() throws IOException {
// 創建一個臨時目錄來存儲要打包的文件
Path tempDirectory = Files.createTempDirectory("temp");
// 將要打包的文件復制到臨時目錄中
Files.copy(Paths.get("path/to/file1"), tempDirectory.resolve("file1.txt"));
Files.copy(Paths.get("path/to/file2"), tempDirectory.resolve("file2.txt"));
// ...
// 創建一個臨時壓縮文件
Path tempZipFile = Files.createTempFile("temp", ".zip");
// 壓縮臨時目錄中的文件
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(tempZipFile.toFile()));
Files.walk(tempDirectory)
.filter(path -> !Files.isDirectory(path))
.forEach(path -> {
try {
ZipEntry zipEntry = new ZipEntry(tempDirectory.relativize(path).toString());
zipOutputStream.putNextEntry(zipEntry);
zipOutputStream.write(Files.readAllBytes(path));
zipOutputStream.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
});
zipOutputStream.close();
// 構建ResponseEntity對象并返回
Resource zipResource = new FileSystemResource(tempZipFile.toFile());
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"download.zip\"")
.body(zipResource);
}
}
application.properties
文件中配置臨時文件目錄:spring.servlet.multipart.enabled=false
spring.http.multipart.enabled=false
spring.servlet.multipart.location=${java.io.tmpdir}
http://localhost:8080/download/zip
即可下載打包好的文件。在上述代碼中,我們首先創建一個臨時目錄,并將要打包的文件復制到該目錄中。然后,我們創建一個臨時壓縮文件,并使用ZipOutputStream
將臨時目錄中的文件壓縮到該文件中。最后,我們將壓縮文件作為Resource
對象返回給客戶端,使其可以下載該文件。