将零散文件使用ICSharpCode.SharpZipLib压缩打包后一次性下载

来源:互联网 发布:淘宝卖家图片详情模板 编辑:程序博客网 时间:2024/04/25 21:52

public static Stream CreateZip(List<string> listPath, 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关闭后不关闭mstreamzipstream.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文件类型。

0 0
原创粉丝点击