从内存中的列表 <Byte[]> 创建 Zip 文件

Create Zip File from List<Byte[]> in Memory

我有一个 return 文件列表的 Web 服务。像这样:

public FileModel(){
  string FileName {get;set;}
  byte[] FileStream {get;set;}
  string FileType {get;set;} 
}

我的服务会 return:

  List<FileModel> files;

我必须return这个列表到浏览器,所以我需要将这些文件压缩到一个 zip 文件夹中。

但是,我不知道如何执行此操作,因为 .NET ZipArchive CreateFromDirectory 要求我提供要压缩的文件所在的目录。但是我没有目录,我只有这个列表。如何将此列表隐藏到压缩文件夹中。

给定

public FileModel(){
    string FileName {get;set;}
    byte[] FileStream {get;set;}
    string FileType {get;set;} 
}

下面是为了创建一个zip文件而写的

static class FileModelCompression {

    public static Stream Compress(this IEnumerable<FileModel> files) {
        if (files.Any()) {
            var ms = new MemoryStream();
            using(var archive = new ZipArchive(ms, ZipArchiveMode.Create, leaveOpen: true)) {
                foreach (var file in files) {
                    var entry = archive.add(file);
                }
            }// disposal of archive will force data to be written to memory stream.
            ms.Position = 0; //reset memory stream position.
            return ms;
        }
        return null;
    }

    private static ZipArchiveEntry add(this ZipArchive archive, FileModel file) {
        var entry = archive.CreateEntry(file.FileName, CompressionLevel.Fastest);
        using (var stream = entry.Open()) {
            file.FileStream.CopyTo(stream);
        }
        return entry;
    }
}