Если вы используете .NET Framework 4.5 или новее, вы можете избежать сторонних библиотек и использовать собственный класс System.IO.Compression.ZipArchive
.
Вот краткий пример кода с использованием MemoryStream и парой байтовых массивов, представляющих два файла:
byte[] file1 = GetFile1ByteArray();
byte[] file2 = GetFile2ByteArray();
using (MemoryStream ms = new MemoryStream())
{
using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
var zipArchiveEntry = archive.CreateEntry("file1.txt", CompressionLevel.Fastest);
using (var zipStream = zipArchiveEntry.Open()) zipStream.Write(file1, 0, file1.Length);
zipArchiveEntry = archive.CreateEntry("file2.txt", CompressionLevel.Fastest);
using (var zipStream = zipArchiveEntry.Open()) zipStream.Write(file2, 0, file2.Length);
}
return File(ms.ToArray(), "application/zip", "Archive.zip");
}
Вы можете использовать его внутри контроллера MVC, возвращая ActionResult
: альтернативно, если вам нужно физически создать zip-архив, вы можете либо сохранить MemoryStream
на диске, либо полностью заменить его на FileStream
.
Для получения дополнительной информации по этой теме вы также можете прочитать это сообщение в моем блоге.