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;
回流;
}
}