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

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关闭后不关闭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文件类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值