Class ZipStreamResponseBuilder

java.lang.Object
io.leandev.appfuse.file.ZipStreamResponseBuilder

public class ZipStreamResponseBuilder extends Object

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 Details

    • create

      public static ZipStreamResponseBuilder create(String zipFilename)
      建立 ZipStreamResponseBuilder
      Parameters:
      zipFilename - ZIP 檔案名稱(如 "images.zip")
      Returns:
      ZipStreamResponseBuilder 實例
    • addFile

      public ZipStreamResponseBuilder addFile(String entryName, Supplier<InputStream> contentSupplier)
      新增檔案到 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 - 租戶 ID
      fileId - 檔案 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