public static Stream CreateZip(ListlistPath, int level = 5){ MemoryStream mstream = new MemoryStream(); using (ZipOutputStream zipstream = new ZipOutputStream(mstream)) { zipstream.SetLevel(level); Crc32 crc = new Crc32(); foreach (var path in listPath) { FileStream fs = File.Open(path, FileMode.Open); //重置流的位置 fs.Position = 0L; byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); //ZIP文件条目 ZipEntry entry = new ZipEntry(Path.GetFileName(path)); entry.DateTime = DateTime.Now; entry.Size = fs.Length; fs.Close(); crc.Reset(); crc.Update(buffer); //冗余校验码 entry.Crc = crc.Value; zipstream.PutNextEntry(entry); zipstream.Write(buffer, 0, buffer.Length); } //ZipOutputStream关闭后不关闭mstream zipstream.IsStreamOwner = false; } //重置流的位置 mstream.Position = 0L; return mstream;}
使用流读取并压缩文件。
zipstream.IsStreamOwner = false;必须设置
在MVC中使用FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName)方法可直接下载。
contentType可使用"application/x-zip-compressed"表示zip文件类型。