Создание Zip-файлов из потока памяти C#

По сути, пользователь должен иметь возможность щелкнуть по одной ссылке и загрузить несколько pdf-файлов. Но загвоздка в том, что я не могу создавать файлы на сервере или где-либо еще. Все должно быть в памяти.

Мне удалось создать поток памяти и Response.Flush() в формате pdf, но как сжать несколько потоков памяти без создания файлов.

Вот мой код:

    Response.ContentType = "application/zip";

            // If the browser is receiving a mangled zipfile, IIS Compression may cause this problem. Some members have found that
            // Response.ContentType = "application/octet-stream" has solved this. May be specific to Internet Explorer.
            Response.AppendHeader("content-disposition", "attachment; filename=\"Download.zip\"");
            Response.CacheControl = "Private";
            Response.Cache.SetExpires(DateTime.Now.AddMinutes(3)); // or put a timestamp in the filename in the content-disposition                

            byte[] abyBuffer = new byte[4096];

            ZipOutputStream outStream = new ZipOutputStream(Response.OutputStream);

            outStream.SetLevel(3);

            #region Repeat for each Memory Stream
            MemoryStream fStream = CreateClassroomRoster();// This returns a memory stream with pdf document

            ZipEntry objZipEntry = new ZipEntry(ZipEntry.CleanName("ClassroomRoster.pdf"));

            objZipEntry.DateTime = DateTime.Now;

            objZipEntry.Size = fStream.Length;

            outStream.PutNextEntry(objZipEntry);

            int count = fStream.Read(abyBuffer, 0, abyBuffer.Length);

            while (count > 0)
            {
                outStream.Write(abyBuffer, 0, count);

                count = fStream.Read(abyBuffer, 0, abyBuffer.Length);

                if (!Response.IsClientConnected)
                {
                    break;
                }

                Response.Flush();
            }

            fStream.Close();
            #endregion

            outStream.Finish();
            outStream.Close();

            Response.Flush();
            Response.End();

Это создает zip-файл, но внутри него нет файла

Я использую используя iTextSharp.text - для создания pdf с использованием ICSharpCode.SharpZipLib.Zip - для архивирования

Спасибо, Кавита

10
задан Rowland Shaw 3 December 2014 в 17:24
поделиться