I am trying to create a zip file from a byte[] and return the zip file as a byte[] also but when I upload the bytes to blob storage, the zip file is invalid when I download it.
Code:
byte[] zipBytes;
using (var zipMemoryStream = new MemoryStream())
{
using (var archive = new ZipArchive(zipMemoryStream, ZipArchiveMode.Create, true))
{
var zipExcelEntry = archive.CreateEntry(
$"SAR-{subjectAccessRequest.Basic.FirstName}-{subjectAccessRequest.Basic.LastName}_{DateTime.Now:yyyyMMddHHmmss}.xlsx",
CompressionLevel.Fastest);
using (var excelEntryFile = zipExcelEntry.Open()) excelEntryFile.Write(stream.ToArray(), 0, (int)stream.Length);
zipBytes = zipMemoryStream.ToArray();
};
};
return zipBytes;
Am I doing anything obviously wrong here when creating the zip file?
The code for uploading to blob storage is already tried and tested code so the problem should lie here
You need to close archive before you
ToArray
the stream.You should also use
CopyTo
on the inner file stream.Ideally you would just return the whole zipped stream rather than creating a new byte array, as this is more efficient.