Class ZipFileResponseBuilder
java.lang.Object
io.leandev.appfuse.file.ZipFileResponseBuilder
ZIP 檔案下載 Response 建構器(支援 Range Request)
先產生 ZIP 暫存檔,再提供下載。適用於:
- 大型 ZIP 檔案需要斷點續傳
- 需要支援 Range Request 的場景
運作方式:
- 建立暫存 ZIP 檔案
- 使用
RangeUtils解析 Range header - 回傳完整檔案(200 OK)或部分內容(206 Partial Content)
- 串流結束時自動刪除暫存檔
使用範例
@GetMapping("/products/{id}/images.zip")
public ResponseEntity<Resource> downloadImages(
@PathVariable String id,
@RequestHeader(value = "Range", required = false) String rangeHeader) {
Product product = productService.findById(id);
String tenantId = TenantContext.getCurrentTenantId();
ZipFileResponseBuilder builder = ZipFileResponseBuilder.create("product-images.zip");
// 新增主圖
if (product.getMainImage() != null) {
builder.addFile("main-image.jpg", fileStorage, tenantId,
product.getMainImage().getFileId());
}
// 新增副圖
int i = 1;
for (FileDescriptor fd : product.getGalleryImages()) {
builder.addFile("gallery-" + i++ + ".jpg", fileStorage, tenantId, fd.getFileId());
}
return builder.range(rangeHeader).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.core.io.Resource> build()建構 ResponseEntitystatic ZipFileResponseBuilder建立 ZipFileResponseBuilderint取得檔案數量booleanhasFiles()檢查是否有檔案設定 Range header(支援部分內容下載)
-
Method Details
-
create
建立 ZipFileResponseBuilder- Parameters:
zipFilename- ZIP 檔案名稱(如 "images.zip")- Returns:
- ZipFileResponseBuilder 實例
-
addFile
新增檔案到 ZIP- Parameters:
entryName- ZIP 內的檔案名稱contentSupplier- InputStream 供應者- Returns:
- this
-
addFile
public ZipFileResponseBuilder addFile(String entryName, FileStorage fileStorage, String tenantId, String fileId) 新增檔案到 ZIP(使用 FileStorage)- Parameters:
entryName- ZIP 內的檔案名稱fileStorage- FileStorage 實例tenantId- 租戶 IDfileId- 檔案 ID- Returns:
- this
-
range
設定 Range header(支援部分內容下載)- Parameters:
rangeHeader- HTTP Range header 值(如 "bytes=0-1000"),可為 null- Returns:
- this
-
hasFiles
public boolean hasFiles()檢查是否有檔案- Returns:
- 是否有檔案
-
getFileCount
public int getFileCount()取得檔案數量- Returns:
- 檔案數量
-
build
public org.springframework.http.ResponseEntity<org.springframework.core.io.Resource> build()建構 ResponseEntity
產生 ZIP 暫存檔並回傳下載回應。支援 Range Request。
- Returns:
- ResponseEntity with Resource
-