Ich habe eine Reihe von Jpg-Bildern in Byte-Array-Form. Ich möchte diese zu einer Zip-Datei hinzufügen, die Zip-Datei in ein Byte-Array umwandeln und es an einen anderen Ort weiterleiten. Bei einem Verfahren, habe ich diesen Code:Byte-Array wird beschädigt, wenn an eine andere Methode übergeben
var response = //some response object that will hold a byte array
using (var ms = new MemoryStream())
{
using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
var i = 1;
foreach (var image in images) // some collection that holds byte arrays.
{
var entry = zipArchive.CreateEntry(i + ".jpg");
using (var entryStream = entry.Open())
using (var compressStream = new MemoryStream(photo.ImageOriginal))
{
compressStream.CopyTo(entryStream);
}
i++;
}
response.ZipFile = ms.ToArray();
}
using (var fs = new FileStream(@"C:\Users\MyName\Desktop\image.zip", FileMode.Create))
{
ms.Position = 0;
ms.CopyTo(fs);
}
}
return response;
Jetzt habe ich eine Filestream in der Nähe der Unterseite hinzugefügt, um es zu einer Zip-Datei zu schreiben, sofort zu Testzwecken. Das funktioniert, ich bekomme eine Zip-Datei mit 1 oder mehr Bildern auf meinem Desktop. Allerdings: response.ZipFile
kann nicht auf dieselbe Weise in eine gültige ZIP-Datei umgewandelt werden. Ich habe es versucht:
using (var ms2 = new MemoryStream(response.ZipFile))
using (var fs = new FileStream(@"C:\Users\Bara\Desktop\image.zip", FileMode.Create))
{
ms2.Position = 0;
ms2.CopyTo(fs);
}
Aber das erstellt eine ZIP-Datei, die nicht geöffnet werden kann.
Was ich versuche zu tun: Drehen Sie response.ZipFile
in ein Array, das wieder in eine funktionierende ZIP-Datei verwandelt werden kann. Was mache ich falsch in diesem Code?
Es bizarr scheint einen neuen 'MemoryStream' zu konstruieren, das Objekt nur in der Lage sein,' zu nennen CopyTo', wenn Sie Ihr Byte-Array einfach direkt in den Zielstream schreiben können. –
Deshalb bin ich immer noch ein Student und du bist ein Meister. :-) – ohyeah