Twórz i przesyłaj strumieniowo plik z archiwum obrazów do pobrania C #

Używam ulubionej biblioteki archiwizującej DotNetZip w MVC3 do generowania w locie pliku Zip, który zawiera obrazy .png z plików binarnych przechowywanych w bazie danych. Następnie przesyłam wygenerowany plik Zip, aby użytkownik mógł go pobrać. (Sprawdzam dane obrazu przed zapisaniem do bazy danych, więc możesz założyć, że wszystkie dane obrazu są poprawne).

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

Ten kod będzie działał do przesyłania i eksportowania JEDNEGO (1) obrazu. Jednak po przesłaniu więcej niż jednego obrazu do bazy danych, a następnie próbie wyeksportowania ich wszystkich, wygenerowany plik Zip będzie zawierał tylko dane najnowszego przesłanego obrazu. Wszystkie pozostałe obrazki NAMES pojawią się w pliku zip, ale ich rozmiar pliku będzie wynosił 0 i będą to po prostu puste pliki.

Zgaduję, że mój problem ma związek z MemoryStreams (lub że brakuje mi czegoś prostego), ale o ile wiem, przechodząc przez kod, obrazy są pobierane z bazy danych i dodawane do plik z powodzeniem ...