ASP.NET Core 生成zip压缩包

238 阅读1分钟

一、概述

在一些后台管理系统中,基本上都有导出数据到文件的功能,如果涉及到批量导出功能,一般都会把文件放到压缩包里边,最后生成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必须释放才可以,否则最后的压缩包会损坏而无法打开。