Каков наилучший способ отображения изображения из базы данных сервера SQL в asp.net? - PullRequest
4 голосов
/ 04 марта 2009

У меня есть база данных sql server, которая возвращает байт для изображения. Если я использую мастер адаптера таблиц и задаю для него хранимую процедуру и предварительный просмотр данных, он возвращает изображение. Это автоматически превращает его в изображение в данных предварительного просмотра. Я не вижу это как строку Ints или что-то еще.

Как я могу отобразить его на моей веб-странице asp.net с gridview и objectdatasource?

Я искал и нашел, где поле изображения может указывать на URL на другой странице, которая выполняет преобразование байтов, но я не уверен, что это лучше. Я нашел другой способ, который создает временный файл.

Просто пытаюсь найти лучший способ сделать это.

edit - я пытаюсь не использовать временный файл. Если я не могу использовать gridview, нормальное поле изображения в порядке.

asp.net 2.0, c #.

Спасибо за любую помощь.

редактировать

закончилось:

   protected void Page_Load(object sender, EventArgs e)
    {
        string id = Request["id"];
        string connstr = "DSN=myserver";
        OdbcConnection conn = new OdbcConnection(connstr);
        OdbcCommand cmd = new OdbcCommand("{call mySP (?)}", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        OdbcParameter parameter = new OdbcParameter();
        parameter.ParameterName = "@MyParam";
        parameter.OdbcType = OdbcType.VarChar;
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = id;

        // Add the parameter to the Parameters collection. 
        cmd.Parameters.Add(parameter);
        conn.Open();
        OdbcDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            byte[] buffer = (byte[])dr[0];
            Response.ContentType = "image/jpg";
            Response.BinaryWrite(buffer);
            Response.Flush();
        }
    }

и это на странице вызова:

<asp:Image ID="Image1" ImageAlign="Middle" ImageUrl="show.aspx?id=123" Runat="server" />

Ответы [ 4 ]

4 голосов
/ 04 марта 2009

Два варианта:

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

Служить с другого URL - это мой предпочтительный метод, поскольку у вас нет доступа к диску. Простой обработчик http (ashx) - отличный метод для обработки изображения.

Редактировать

Если вам нужно состояние сеанса в ashx, проверьте: Asp.net System.Web.HttpContext.Current.Session null в global.asax .

Редактировать

Пара мыслей. В некоторых случаях использование временного файла может быть лучше. Например, если ваши изображения часто запрашиваются многими пользователями. Тогда сохранение образов на диске будет иметь смысл, поскольку вы можете записать файл один раз, это увеличивает сложность обслуживания, но в зависимости от трафика это может стоить, так как это позволит вам избежать обратного вызова в стек .net и использовать IIS. кеширование статического контента.

0 голосов
/ 01 декабря 2011

Я написал плагин SqlReader для библиотеки ImageResizing.Net с открытым исходным кодом , чтобы позволить вам обслуживать и отображать изображения из базы данных SQL наиболее оптимальным способом.

Даже если вам не нужно выполнять какую-либо обработку изображения, это все равно (а) самый простой и (б) самый эффективный способ сделать это. Вы можете объединить его с кэшированием диска (которое обеспечивает автоматическую очистку), чтобы получить наилучшую возможную производительность.

Установка проста - 2 команды nuget или скопируйте и вставьте в Web.Config, ваш выбор.

Если вам нужна помощь, поддержка бесплатна и быстра.

0 голосов
/ 05 марта 2009

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

0 голосов
/ 04 марта 2009

Здесь - пример кода, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...