Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从IFormFileCollection创建存档流_C#_.net Core_Stream_Zip_Iformfile - Fatal编程技术网

C# 如何从IFormFileCollection创建存档流

C# 如何从IFormFileCollection创建存档流,c#,.net-core,stream,zip,iformfile,C#,.net Core,Stream,Zip,Iformfile,我收到一个IFormFileCollection,我想知道如何将此集合归档到zip/rar/任何归档文件中并将此归档文件作为流发送到其他地方存储? 我只想通过流(s)在内存中工作,因为稍后我将通过HTTP发送它 class ArchiveService { public Stream ArchiveFiles(string archiveName, IEnumerable<IFormFile> files) { using MemoryStream strea

我收到一个
IFormFileCollection
,我想知道如何将此集合归档到
zip/rar/任何归档文件中
并将此归档文件作为
发送到其他地方存储? 我只想通过
(s)在内存中工作,因为稍后我将通过HTTP发送它

class ArchiveService {
    public Stream ArchiveFiles(string archiveName, IEnumerable<IFormFile> files) {
        using MemoryStream stream = new MemoryStream();
        using (System.IO.Compression.ZipArchive archive = ZipFile.Open([in memory!], ZipArchiveMode.Create)) {
            foreach (var file in files) {
                archive.CreateEntry(file.FileName, CompressionLevel.Fastest);
            }
           //something like -> archive.CopyTo(stream);
        }
        return stream;

    }
}
类ArchiveService{
公共流存档文件(字符串存档名称、IEnumerable文件){
使用MemoryStream stream=new MemoryStream();
使用(System.IO.Compression.ZipArchive archive=ZipFile.Open([in memory!],ZipArchiveMode.Create)){
foreach(文件中的var文件){
CreateEntry(file.FileName,CompressionLevel.faster);
}
//类似->archive.CopyTo(流);
}
回流;
}
}

在内存中创建存档并遍历集合,将文件添加到存档中

返回的流将包含压缩到存档中的文件

然后,您可以根据自己的意愿处理流

public class ArchiveService {
    public Stream ArchiveFiles(IEnumerable<IFormFile> files) {
        MemoryStream stream = new MemoryStream();
        using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Create, leaveOpen: true)) {
            foreach (IFormFile file in files) {
                var entry = archive.CreateEntry(file.FileName, CompressionLevel.Fastest);
                using (Stream target = entry.Open()) {
                    file.CopyTo(target);
                }
            }
        }
        stream.Position = 0;
        return stream;
    }

    public async Task<Stream> ArchiveFilesAsync(IEnumerable<IFormFile> files) {
        MemoryStream stream = new MemoryStream();
        using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Create, leaveOpen: true)) {
            foreach (IFormFile file in files) {
                var entry = archive.CreateEntry(file.FileName, CompressionLevel.Fastest);
                using (Stream target = entry.Open()) {
                    await file.OpenReadStream().CopyToAsync(target);
                }
            }
        }
        stream.Position = 0;
        return stream;
    }
}
公共类ArchiveService{
公共流存档文件(IEnumerable文件){
MemoryStream stream=新的MemoryStream();
使用(ZipArchive archive=new ZipArchive(stream,ZipArchiveMode.Create,leaveOpen:true)){
foreach(文件中的文件){
var entry=archive.CreateEntry(file.FileName,CompressionLevel.faster);
使用(Stream target=entry.Open()){
file.CopyTo(目标文件);
}
}
}
流位置=0;
回流;
}
公共异步任务ArchiveFileAsync(IEnumerable文件){
MemoryStream stream=新的MemoryStream();
使用(ZipArchive archive=new ZipArchive(stream,ZipArchiveMode.Create,leaveOpen:true)){
foreach(文件中的文件){
var entry=archive.CreateEntry(file.FileName,CompressionLevel.faster);
使用(Stream target=entry.Open()){
等待文件.OpenReadStream().CopyToAsync(目标);
}
}
}
流位置=0;
回流;
}
}