Class ZipStreamResponseBuilder
java.lang.Object
io.leandev.appfuse.file.ZipStreamResponseBuilder
ZIP 串流下載 Response 建構器
邊壓縮邊傳輸,適用於:
- 檔案數量不多、總大小適中的批次下載
- 不需要斷點續傳的場景
限制:由於 ZIP Central Directory 在檔案結尾,串流模式無法預知總大小,
因此不支援 Range Request。如需支援斷點續傳,請使用 ZipFileResponseBuilder。
使用範例
@GetMapping("/orders/{id}/attachments.zip")
public ResponseEntity<StreamingResponseBody> downloadAttachments(@PathVariable String id) {
Order order = orderService.findById(id);
String tenantId = TenantContext.getCurrentTenantId();
ZipStreamResponseBuilder builder = ZipStreamResponseBuilder.create("attachments.zip");
for (FileDescriptor fd : order.getAttachments()) {
builder.addFile(fd.getFilename(),
() -> fileStorage.getInputStream(tenantId, fd.getFileId()));
}
return builder.build();
}
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionaddFile(String entryName, FileStorage fileStorage, String tenantId, String fileId) 新增檔案到 ZIP(使用 FileStorage)addFile(String entryName, Supplier<InputStream> contentSupplier) 新增檔案到 ZIPorg.springframework.http.ResponseEntity<org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody> build()建構 ResponseEntitystatic ZipStreamResponseBuilder建立 ZipStreamResponseBuilderint取得檔案數量booleanhasFiles()檢查是否有檔案
-
Method Details
-
create
建立 ZipStreamResponseBuilder- Parameters:
zipFilename- ZIP 檔案名稱(如 "images.zip")- Returns:
- ZipStreamResponseBuilder 實例
-
addFile
新增檔案到 ZIP- Parameters:
entryName- ZIP 內的檔案名稱contentSupplier- InputStream 供應者(延遲取得,避免過早開啟串流)- Returns:
- this
-
addFile
public ZipStreamResponseBuilder addFile(String entryName, FileStorage fileStorage, String tenantId, String fileId) 新增檔案到 ZIP(使用 FileStorage)- Parameters:
entryName- ZIP 內的檔案名稱fileStorage- FileStorage 實例tenantId- 租戶 IDfileId- 檔案 ID- Returns:
- this
-
hasFiles
public boolean hasFiles()檢查是否有檔案- Returns:
- 是否有檔案
-
getFileCount
public int getFileCount()取得檔案數量- Returns:
- 檔案數量
-
build
public org.springframework.http.ResponseEntity<org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody> build()建構 ResponseEntity
回傳串流式 ZIP 下載回應(不支援 Range Request)。
- Returns:
- ResponseEntity with StreamingResponseBody
-