ASP.NET中图像文件的处理

ASP.NET环境中,处理图像文件是一项常见的任务。本文将介绍如何将图像文件存储到数据库中,以及如何从数据库中检索并显示这些图像。将探讨如何使用ASP.NET控件,如DataGrid,来显示这些图像,并解决在显示过程中可能遇到的问题。

数据库中的图像存储

首先,需要在数据库中创建一个表来存储图像文件。这个表将包含两个字段:一个用于存储图像的二进制数据,另一个用于存储图像的文件扩展名。

以下是创建这样一个表的SQL语句示例:

CREATE TABLE [transact].[TestImageStore]( [img] [varbinary](max) NULL, [Image_Type] [varchar](20) NULL, [imgID] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_TestImageStore] PRIMARY KEY CLUSTERED ( [imgID] ASC ) ON [PRIMARY] )

在这个表中,[img]字段用于存储图像的二进制数据,[Image_Type]字段用于存储图像的文件扩展名,而[imgID]字段是一个自增的整数,用于唯一标识每条记录。

ASP.NET页面中显示图像

要在ASP.NET页面中显示存储在数据库中的图像,需要使用DataGrid控件。以下是实现这一功能的步骤:

  1. 在ASPX页面中添加一个DataGrid控件。
  2. 创建一个TemplateColumn,用于放置HTML图像控件。
  3. 设置HTML图像控件的ID和runat属性,并移除src属性。
  4. 执行查询语句,从数据库中获取结果集。
  5. 将结果集绑定到DataGrid控件。
  6. 在DataGrid的ItemDataBound事件中,为每个唯一ID获取图像的二进制值。
  7. 将二进制值写入内存流,并存储在系统的临时文件夹中。
  8. 将URL设置为HTML图像控件的src属性。

以下是ASPX页面的示例代码:

<asp:DataGrid ID="dgBindImage" runat="server" AutoGenerateColumns="false"> <Columns> <asp:TemplateColumn HeaderText="Images"> <ItemTemplate > <asp:Label ID="lblCode" Text='<%# Server.HtmlEncode(DataBinder.Eval(Container, "DataItem.imgID").ToString()) %>' runat="server" /> <img id="imgPic" width="120" height="100" runat="server" /> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid>

在代码后台,需要处理DataGrid的ItemDataBound事件,以动态设置图像控件的src属性。以下是处理该事件的示例代码:

protected void dgBindImage_ItemDataBound(object sender, DataGridItemEventArgs e) { try { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { byte[] photoByte = null; string PhotoExtension = string.Empty; Label lblCode = (Label)e.Item.Cells[0].FindControl("lblCode"); HtmlImage img = (HtmlImage)e.Item.Cells[0].FindControl("imgPic"); if (dsInsp != null && img != null && lblCode != null && !string.IsNullOrEmpty(lblCode.Text)) { DataRow[] drowarr = dsInsp.Tables[0].Select("imgID=" + lblCode.Text); DataRow dr = drowarr[0]; if (dr != null && dr["img"] != null && dr["Image_Type"] != null) { if (dr["img"] != DBNull.Value) { photoByte = (byte[])dr["img"]; } PhotoExtension = dr["Image_Type"].ToString(); } if (photoByte != null && photoByte.Length > 1) { string strFileName = UIUtilities.GetTempFolderName() + lblCode.Text.ToString() + PhotoExtension; using (MemoryStream stream = new MemoryStream(photoByte)) { System.Drawing.Image newImage = System.Drawing.Image.FromStream(stream); newImage.Save(strFileName); img.Attributes.Add("src", strFileName); } } else { img.Attributes.Add("src", ""); } } } } catch (Exception ex) { // Handle exception } }

将图像上传到数据库

要将图像上传到数据库,需要使用asp:fileUpload控件来浏览图像文件。以下是实现这一功能的步骤:

  1. 使用asp:fileUpload控件浏览图像文件。
  2. 读取上传的文件并将其转换为二进制数据。
  3. 将二进制数据存储在会话对象中,以便跨页面的回发。
  4. 获取图像文件的扩展名,并将其注册到隐藏的页面控件中,以便跨页面的回发。
  5. 将值设置为命令对象的参数,并将其插入到数据库中。

以下是用户指南:

  1. 点击浏览按钮以选择图像文件。
  2. 点击附加链接以附加文件。(可以在下方找到附加的文件路径)
  3. 点击保存按钮以将其存储到数据库。
  4. 点击查看按钮以下载并查看DataGrid中的图像。(注意:下载的文件可以在文件夹C:\Documents and Settings\<>\Local Settings\Temporary Internet Files中查看)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485