C# 如何使用ASP.NET显示存储在SQL Server数据库中的图片?

C# 如何使用ASP.NET显示存储在SQL Server数据库中的图片?,c#,asp.net,sql-server,image,sql-server-2008,C#,Asp.net,Sql Server,Image,Sql Server 2008,我有一个SQLServer2008数据库,它有一个包含图片的图像字段 我的ASP.NET web程序中有一个gridview,我需要在以下位置显示图片: 我的网格视图 我在窗体中的图像控件 我能得到一些示例代码吗 提前谢谢。我相信图像会以二进制形式出现。您需要将二进制文件转换为图像 这些参考资料将帮助您进行转换 我相信图像将以二进制形式出现。您需要将二进制文件转换为图像 这些参考资料将帮助您进行转换 您可以将数据uri方案与base64(假设它存储在base64中)字符串一起使用,即 <

我有一个SQLServer2008数据库,它有一个包含图片的图像字段

我的ASP.NET web程序中有一个gridview,我需要在以下位置显示图片:

  • 我的网格视图

  • 我在窗体中的图像控件

  • 我能得到一些示例代码吗


    提前谢谢。

    我相信图像会以二进制形式出现。您需要将二进制文件转换为图像

    这些参考资料将帮助您进行转换


    我相信图像将以二进制形式出现。您需要将二进制文件转换为图像

    这些参考资料将帮助您进行转换


    您可以将数据uri方案与base64(假设它存储在base64中)字符串一起使用,即

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

    因此,例如,如果您使用的是数据绑定控件,您将(例如,对于中继器)执行以下操作:

    <ItemTemplate>
        <img src='data:image/<%# Eval("FileType") %>;base64,<%# Eval("ImageData") %> width='<%# Eval("ImgWidth")%>' height='<%# Eval("ImgHeight")%>' />
    </ItemTemplate>
    
    
    ;base64,宽度=''高度=''/>
    
    您可以将数据uri方案与base64(假设它存储在base64中)字符串一起使用,即

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

    因此,例如,如果您使用的是数据绑定控件,您将(例如,对于中继器)执行以下操作:

    <ItemTemplate>
        <img src='data:image/<%# Eval("FileType") %>;base64,<%# Eval("ImageData") %> width='<%# Eval("ImgWidth")%>' height='<%# Eval("ImgHeight")%>' />
    </ItemTemplate>
    
    
    ;base64,宽度=''高度=''/>
    
    使用通用处理程序从数据库中获取图像,并显示使用ifram将是在web上显示文件的更好选项

                    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;
            }
        }
    }
    

    使用通用处理程序从数据库中获取图像,并显示使用ifram将是在web上显示文件的更好选项

                    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;
            }
        }
    }
    

    可能重复的是存储在Filestream中的图像还是存储在VARBINIAL列中的图像?可能重复的是存储在Filestream中的图像还是存储在VARBINIAL列中的图像;跨浏览器不完全支持数据uri,因此可能不适合您;跨浏览器不完全支持数据uri,因此可能不适合您。