Erstellen und stream-Bild-Archiv-zip-Datei zum download C#

Ich bin mit dem geliebten DotNetZip Archivierung Bibliothek in MVC3 zu generieren, die eine Zip-Datei auf der fliege, die enthält .png-Bilder von Binärdateien in einer Datenbank gespeichert. Ich habe dann streamen Sie die generierte Zip-Datei für die Benutzer zum herunterladen. (Ich überprüfen Bild Daten vor dem speichern in die Datenbank, so können Sie davon ausgehen, dass alle Bild-Daten gültig).

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");
      }

Dieser code funktioniert für die übertragung und den Export EIN (1) Bild. Allerdings nach dem hochladen mehr als ein Bild in die Datenbank und dann zu exportieren versucht, die Zip-Datei, die generiert wird, enthält nur die Daten des letzten hochgeladenen Bildes. All die anderen NAMEN des Bildes erscheint in der zip-Datei, aber die Datei-Größe 0 und Sie sind einfach leere Dateien.

Ich vermute, mein Problem hat zu tun mit der MemoryStreams (oder bin ich etwas fehlt einfach), aber so weit wie ich kann sagen, durch den code schrittweise Durchlaufen, die Bilder werden aus der Datenbank abgerufen und Hinzugefügt werden, um die zip-Datei erfolgreich...

InformationsquelleAutor user1449244 | 2012-09-24
Schreibe einen Kommentar