Скачать несколько BLOB-файлов в виде ZIP-файла - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть веб-страница asp.net, где пользователи могут выбирать несколько элементов в сетке.Когда они нажимают кнопку загрузки, они должны иметь возможность загружать несколько PDF-файлов в виде zip-файла на основе идентификаторов выбранных элементов сетки.PDF-файлы хранятся в базе данных Oracle в виде BLOB-объектов.

Я могу получить один BLOB-объект и отобразить его в формате PDF в браузере.Но мне трудно понять, как поместить несколько BLOB-объектов в виде PDF-файлов в zip-файл, а затем загрузить указанный zip-файл.Я хотел бы использовать библиотеку System.IO.Compression, если это возможно.

Вот как выглядит мой код для отображения одного файла PDF:

OracleBlob oBlob = null;
byte[] bBlob = null;

using (OracleDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        sFileId = reader.GetInt32(0).ToString();

        oBlob = reader.GetOracleBlob(1);

        if (!oBlob.IsNull)
        {
            bBlob = new byte[oBlob.Length];

            oBlob.Read(bBlob, 0, (int)oBlob.Length);
        }
    }
}

if (bBlob != null)
{
    HttpContext.Current.Response.ContentType = "application/pdf";
    HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;");
    HttpContext.Current.Response.AddHeader("content-length", bBlob.Length.ToString());
    HttpContext.Current.Response.BinaryWrite(bBlob);

    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.SuppressContent = true;
    HttpContext.Current.ApplicationInstance.CompleteRequest();
}

1 Ответ

0 голосов
/ 26 сентября 2018

вам нужно использовать другую библиотеку для архивирования. DotNetZip

  using (var zip = new ZipFile())
        {

            zip.AddEntry("zpn.pdf", bBlob);

            using (var memoryStream = new MemoryStream())
            {
                zip.Save(memoryStream);

                HttpContext.Current.Response.ContentType = "application/zip";
                HttpContext.Current.Response.AddHeader("content-disposition", " inline; filename=\"myfile.zip");
                HttpContext.Current.Response.BinaryWrite(memoryStream.ToArray());
                HttpContext.Current.Response.Flush();
                HttpContext.Current.ApplicationInstance.CompleteRequest();
                HttpContext.Current.Response.End();
            }
        }
...