从列表创建Zip文件<;字节[]>;内存中
本文关键字:gt 内存 字节 lt 列表 创建 Zip 文件 | 更新日期: 2024-10-20 07:48:53
我有一个返回文件列表的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;
}
}