DotNetZip - Berechnen Sie die endgültige Zip-Größe, bevor Sie Save (Stream) aufrufen.

StackOverflow https://stackoverflow.com/questions/5402497

  •  28-10-2019
  •  | 
  •  

Frage

Ist es bei Verwendung von DotNetZip möglich, die endgültige Größe der Zip-Datei zu ermitteln, bevor Sie Save (Stream) aufrufen?Ich habe eine Website, auf der Benutzer ziemlich große Zip-Dateien (über 2 Gigs) herunterladen, und ich möchte die Datei an den Benutzer streamen können, anstatt die gesamte Datei in den Speicher zu puffern.So etwas in der Art ...

response.BufferOutput = false;
response.AddHeader("Content-Length", ????);

Ist das möglich?

War es hilfreich?

Lösung

Wenn der Stream homogen ist, können Sie einige Zeit verschwenden, indem Sie einen kleinen Teil vor sich komprimieren, das Komprimierungsverhältnis berechnen und daraus extrapolieren.

Wenn Sie einen Header mit Inhaltslänge oder ähnliches festlegen möchten, ist dies nur möglich, wenn Sie (1) eine temporäre Datei schreiben (ratsam, wenn das Risiko von Verbindungsproblemen besteht und Clients ohnehin bestimmte Chunks anfordern).(2) kann die gesamte Datei im Speicher behalten (vermutlich nur auf einem 64-Bit-System mit reichlich Speicher)

Natürlich könnten Sie enorme Ressourcen verschwenden und den Stream nur zweimal komprimieren, aber ich hoffe, Sie stimmen zu, dass das albern wäre.

Andere Tipps

Sie können die Datei in einer temporären Dateisystemdatei speichern und das Ergebnis dann an den Benutzer streamen.Auf diese Weise können Sie die Größe berechnen und dann die Datei übertragen.

In diesem Fall speichert dotnetzip die Datei nicht im Speicher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top