Is it somehow possible to create a ZipArchive from the file(s) in memory (and not actually on the disk).
Following is the use case:
Multiple files are received in an IEnumerable<HttpPostedFileBase>
variable. I want to zip all these files together using ZipArchive
. The problem is that ZipArchive
only allows CreateEntryFromFile
, which expects a path to the file, where as I just have the files in memory.
Question:
Is there a way to use a 'stream' to create the 'entry' in ZipArchive
, so that I can directly put in the file's contents in the zip?
I don't want to first save the files, create the zip (from the saved files' paths) and then delete the individual files.
Here, attachmentFiles
is IEnumerable<HttpPostedFileBase>
using (var ms = new MemoryStream())
{
using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (var attachment in attachmentFiles)
{
zipArchive.CreateEntryFromFile(Path.GetFullPath(attachment.FileName), Path.GetFileName(attachment.FileName),
CompressionLevel.Fastest);
}
}
...
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…