2012-01-12 6 views

答えて

14

MemoryStream msFormXml = new MemoryStream(UTF8Encoding.Default.GetBytes("<form><pkg>Test1</pkg></form>")); 
MemoryStream msFormHTML = new MemoryStream(UTF8Encoding.Default.GetBytes("<html><body>Test2</body></html>")); 

MemoryStream outputMemStream = new MemoryStream(); 
ZipOutputStream zipStream = new ZipOutputStream(outputMemStream); 

zipStream.SetLevel(3); //0-9, 9 being the highest level of compression 

ZipEntry xmlEntry = new ZipEntry("Form.xml"); 
xmlEntry.DateTime = DateTime.Now; 
zipStream.PutNextEntry(xmlEntry); 
StreamUtils.Copy(msFormXml, zipStream, new byte[4096]); 
zipStream.CloseEntry(); 

ZipEntry htmlEntry = new ZipEntry("Form.html"); 
htmlEntry.DateTime = DateTime.Now; 
zipStream.PutNextEntry(htmlEntry); 
StreamUtils.Copy(msFormHTML, zipStream, new byte[4096]); 
zipStream.CloseEntry(); 

zipStream.IsStreamOwner = false; 
zipStream.Close(); 

outputMemStream.Position = 0; 

byte[] byteArray = outputMemStream.ToArray(); 

Response.Clear(); 
Response.AppendHeader("Content-Disposition", "attachment; filename=FormsPackage.zip"); 
Response.AppendHeader("Content-Length", byteArray.Length.ToString()); 
Response.ContentType = "application/octet-stream"; 
Response.BinaryWrite(byteArray); 
+0

感謝の下に試してみてください。これはうまくいった! – Dimuthu

+0

要求が完了してダウンロードが完了したら、メモリは解放されますか?私も非常に似たようなことをやっていますし、たくさんのファイルがあるかもしれません。要求が完了した後にメモリをクリアする必要があります。私はガベージコレクターがそれを世話するだろうと確信していますが、私は100%確実ではありません。 – harsimranb

+0

ガベージコレクタがそれを行うと仮定します。しかし、 "MemoryStream"のようなデータ型の場合、メモリが解放されることを保証するためにDispose()を呼び出すか、または "using"ステートメントを使用する必要があります。 –

関連する問題