从内存中的列表<字节[]>创建 zip 文件



我有一个返回文件列表的web服务。类似这样的东西:

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

我的服务将返回:

  List<FileModel> files;

我必须将这个列表返回到浏览器,所以我需要将这些文件压缩到一个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;
    }
}

最新更新