Хобрук: Ваш путь к мастерству в программировании

Загрузите несколько BLOB-объектов в виде ZIP-файла

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

Я могу получить один большой двоичный объект и отобразить его в формате PDF в браузере. Но мне трудно понять, как поместить несколько больших двоичных объектов в виде 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();
}
26.09.2018

Ответы:


1

вам нужно использовать другую библиотеку для zip. 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();
            }
        }
26.09.2018
  • Спасибо за ваше предложение. Я могу скачать zip-файл с вашим кодом, но не могу открыть zip-файл. Может ли это быть связано с тем, что BLOB-объект на самом деле представляет собой PDF-файл, но он загружается в виде zip-файла, поэтому его нельзя открыть? 26.09.2018
  • извините, я немного изменил ответ. Вы можете попробовать еще раз, пожалуйста? 26.09.2018
  • Даааа! Это работает как шарм. Огромное спасибо! 26.09.2018
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...