Как показать картинку, которая хранится в базе данных SQL Server с использованием ASP.NET? - PullRequest
0 голосов
/ 03 декабря 2010

У меня есть база данных SQL Server 2008 с полем изображения, содержащим изображение.

У меня есть сетка в моей веб-программе ASP.NET, и мне нужно показать картинку в:

  1. мой просмотр сетки

  2. мой элемент управления изображением в форме

Могу ли я получить пример кода?

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 03 декабря 2010

Я верю, что образ будет двоичным.Вам нужно будет преобразовать двоичный файл в изображение.

Эти ссылки помогут вам преобразовать

Silverlight 4.0: как преобразовать байт [] в изображение?*

http://www.eggheadcafe.com/community/aspnet/2/10038022/convert-binary-data-to-an-image.aspx

0 голосов
/ 10 апреля 2012

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

                iframeFile.Attributes.Add("src", "/ShowImage.ashx?id=" + id);

И это общий код обработчика для отображения файлов изображений, а такжедля PDF-файлов.если вы просто хотите показать файлы изображений, просто удалите условия if else и используйте image / jpeg для расширения.

public class ShowImage : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Int32 imgID;
        if (context.Request.QueryString["id"] != null)
            imgID = Convert.ToInt32(context.Request.QueryString["id"]);
        else
            throw new ArgumentException("No parameter specified");

        byte[] buffer = ShowEmpImage(imgID);
        bool temp = false;
        string extension = "";
        var enc = new ASCIIEncoding();
        var header = enc.GetString(buffer);
        dbClass db = new dbClass();
        extension = db.GetID("select fileExtension from tableName WHERE LOGuid=" + imgID, "fileExtension");
        if (extension == null || extension == "")
        {

            if (buffer[0] == 0x25 && buffer[1] == 0x50
            && buffer[2] == 0x44 && buffer[3] == 0x46)
            {
                temp = header.StartsWith("%PDF-");
                extension = "application/pdf";
            }
            else if (buffer[0] == 0xFF && buffer[1] == 0xD8
            && buffer[2] == 0xFF && buffer[3] == 0xE0)
            {
                temp = header.StartsWith("%JPG-");
                extension = "image/jpeg";
                extension = "image/jpg";
            }
            else if (buffer[0] == 0x89 && buffer[1] == 0x50
            && buffer[2] == 0x4E && buffer[3] == 0x47)
            {
                temp = header.StartsWith("%PNG-");
                extension = "image/jpeg";
                extension = "image/png";
            }
            else if (buffer[0] == 0x49 && buffer[1] == 0x49
            && buffer[2] == 0x2A && buffer[3] == 0x00)
            {
                temp = header.StartsWith("%TIF-");
                extension = "image/jpeg";
                extension = "image/tiff";
                extension = "image/tif";
            }
            else if (buffer[0] == 0x47 && buffer[1] == 0x49
            && buffer[2] == 0x46 && buffer[3] == 0x38)
            {
                temp = header.StartsWith("%GIF-");
                extension = "image/jpeg";
                extension = "image/gif";
            }
            else if (buffer[0] == 0x42 && buffer[1] == 0x4D
            && buffer[2] == 0x46 && buffer[3] == 0x38)
            {
                temp = header.StartsWith("%BMP-");
                extension = "image/jpeg";
                extension = "image/bmp";
            }
            else if (buffer[0] == 0x00 && buffer[1] == 0x00
            && buffer[2] == 0x01 && buffer[3] == 0x00)
            {
                temp = header.StartsWith("%ICO-");
                extension = "image/jpeg";
                extension = "image/ico";
            }
            else
                extension = "image/jpeg";
            //else
            //extension = "application/pdf";
        }
        context.Response.ContentType = extension;
        context.Response.AddHeader("content-length", buffer.Length.ToString());
        context.Response.BinaryWrite(buffer);
    }

    public byte[] ShowEmpImage(int imgID)
    {
        dbClass db = new dbClass();
        string sql = "SELECT LOGpdf FROM tableName WHERE LOGuid = @ID";
        SqlCommand cmd = new SqlCommand(sql, db.con);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@ID", imgID);
        object img = null;
        try
        {
            db.Connect();
            img = cmd.ExecuteScalar();
        }
        catch
        {
            return null;
        }
        finally
        {
            db.Disconnect();
        }
        return (byte[])img;
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
0 голосов
/ 09 декабря 2011

Вы можете использовать схему URI для данных с base64 (при условии, что она хранится в base64), то есть

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

См. http://en.wikipedia.org/wiki/Data_URI_scheme

Так, например, если бы вы использовали элемент управления с привязкой к данным, вы бы, например, сделали для ретранслятора:

<ItemTemplate>
    <img src='data:image/<%# Eval("FileType") %>;base64,<%# Eval("ImageData") %> width='<%# Eval("ImgWidth")%>' height='<%# Eval("ImgHeight")%>' />
</ItemTemplate>
0 голосов
/ 04 декабря 2010

Я разместил некоторый код в похожем вопросе здесь:

Потоковая передача изображений с использованием HttpHandler

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