一、概述
在一些后台管理系统中,基本上都有导出数据到文件的功能,如果涉及到批量导出功能,一般都会把文件放到压缩包里边,最后生成zip文件,在c#中如果需要生成压缩包需要用到ZipArchive类。
二、代码示例
首先定义 ZipArchive 对象
using var archive = new ZipArchive(stream, ZipArchiveMode.Create, true);
往 ZipArchive 对象写入数据
foreach (var shipment in shipments)
{
await using var fileStreamInZip = archive.CreateEntry($"test.pdf").Open();
await using var pdfStream = new MemoryStream();
// 生成pdf文件
await PrintPackagingSlipToPdfAsync(pdfStream, shipment, language);
pdfStream.Position = 0;
await pdfStream.CopyToAsync(fileStreamInZip);
}
最后导出zip
byte[] bytes;
await using (var stream = new MemoryStream())
{
await _pdfService.PrintOrdersToPdfAsync(stream, orders);
bytes = stream.ToArray();
}
return File(bytes, "application/zip", "orders.zip");
总结
在c#中导出zip其实很简单,就是将原先需要导入的文件的流数据,导入到ZipArchive,最后一次性生成一个zip文件即可。需要注意的是,最后使用使用流数据生成压缩包之前ZipArchive必须释放才可以,否则最后的压缩包会损坏而无法打开。