2012-10-19 34 views
4

我需要創建一個返回由一個或多個文件組成的GZipStream的服務。文件數量可能爲幾百個,每個文件可能佔用超過500MB。WCF返回「動態」gzipstream

當流被傳輸時,是否可以將文件動態添加到gzipstream? (以避免運行到存儲器外的一個異常時,將文件需要被複制到流)等

:被返回

  1. 複製的fileA到流。
  2. 客戶端開始讀取流。
  3. 當fileA已被讀取(客戶端)時,將fileB複製到流(服務器端)。
  4. 客戶端繼續讀取流。

...等等,直到沒有更多的文件。

Btw。壓縮文件並不重要,只需將它們合併爲一個zip文件,以便客戶端只需下載一個文件即可。

所以我的目標是:將多個文件作爲一個單一文件傳回客戶端,而不一次處理服務器上的所有文件(避免將所有文件加載到內存中,因此引發內存不足異常)。

難道這可以通過創建一個自定義流不知何故或有一個更簡單的方法去?

謝謝。

回答

1

您可以將這些文件合併到磁盤上的單個壓縮文件,然後將該文件傳回。

關於如何合併文件到一個zip文件中看到:c# sharpziplib adding file to existing archive

這解決了內存不足的問題,但它確實意味着你需要大量的磁盤空間。

+0

在磁盤上臨時創建zip似乎是要走的路......謝謝。 – sje