Erstellen und Streamen einer ZIP-Datei für das Bildarchiv zum Herunterladen C #

Ich benutze die beliebte DotNetZip-Archivierungsbibliothek in MVC3, um eine Zip-Datei zu generieren, die PNG-Bilder aus Binärdateien enthält, die in einer Datenbank gespeichert sind. Ich streame dann die generierte Zip-Datei aus, damit der Benutzer sie herunterladen kann. (Ich überprüfe die Bilddaten vor dem Speichern in der Datenbank, sodass Sie davon ausgehen können, dass alle Bilddaten gültig sind.)

public ActionResult PictureExport()
      {
           IEnumerable<UserPicture> userPictures = db.UserPicture.ToList();
           //"db" is a DataContext and UserPicture is the model used for uploaded pictures.
           DateTime today = DateTime.Now;
           string fileName = "attachment;filename=AllUploadedPicturesAsOf:" + today.ToString() + ".zip";
           this.Response.Clear();
           this.Response.ContentType = "application/zip";
           this.Response.AddHeader("Content-Disposition", fileName);

           using (ZipFile zipFile = new ZipFile())
             {
               using (MemoryStream stream = new MemoryStream())
                {
                 foreach (UserPicture userPicture in userPictures)
                  {
                     stream.Seek(0, SeekOrigin.Begin);
                     string pictureName = userPicture.Name+ ".png";
                     using (MemoryStream tempstream = new MemoryStream())
                     {
                        Image userImage = //method that returns Drawing.Image from byte[];
                        userImage.Save(tempstream, ImageFormat.Png);
                        tempstream.Seek(0, SeekOrigin.Begin);
                        stream.Seek(0, SeekOrigin.Begin);
                        tempstream.WriteTo(stream);
                     }

                     zipFile.AddEntry(pictureName, stream);
                 }

                zipFile.Save(Response.OutputStream);
              }

           }

        this.Response.End();
        return RedirectToAction("Home");
      }

Mit diesem Code können Sie EIN (1) Bild hochladen und exportieren. Nachdem Sie jedoch mehr als ein Bild in die Datenbank hochgeladen und anschließend versucht haben, alle Bilder zu exportieren, enthält die generierte Zip-Datei nur die Daten des zuletzt hochgeladenen Bildes. Alle anderen Bildnamen erscheinen in der ZIP-Datei, aber ihre Dateigröße ist 0 und sie sind einfach leere Dateien.

Ich vermute, dass mein Problem mit den MemoryStreams zu tun hat (oder dass ich etwas Einfaches vermisse), aber soweit ich durch den Code sehen kann, werden die Bilder aus der Datenbank gezogen und der Datenbank hinzugefügt zip Datei erfolgreich ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage