存储图片的方式无非两种,一是之间建立图片文件夹,直接读取图片;二是将图片放到数据库中,然后从数据库中读取图片。就本人而言,如果图片不是超级多的话,我喜欢将其放入数据库中,这样有利于项目的维护。
一、将图片以二进制的形式存进数据库
首先在页面中加入上传控件:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
<td class="label">
上传照片:
</td>
<td class="data">
<asp:FileUpload ID="FileUploadPhoto" runat="server" />
<span class="validater">
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="仅支持图片(.gif,.jpg) 文件。"
ControlToValidate="FileUploadPhoto" Display="None" ValidationExpression=".*((\.gif)|(\.jpg))$"></asp:RegularExpressionValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="RegularExpressionValidator1_ValidatorCalloutExtender"
runat="server" Enabled="True" HighlightCssClass="validateError" TargetControlID="RegularExpressionValidator1">
</ajaxToolkit:ValidatorCalloutExtender>
</span>
</td>
后台代码就是一句话即可:
expert.Image = FileUploadPhoto.FileBytes; 再保存数据库,将图片存到数据库中。
二、从数据库中读取图片:
新建一个页面,为ShowImage.aspx;如下:
页面的Html为
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowImage.aspx.cs" Inherits="Srims.WebSite.ShowImage" %>
后台代码为:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
private const string fileType = "image/jpg";
protected void Page_Load(object sender, EventArgs e)
{
var expert = DatabaseGateWay
.GetNewDatabase()
.Experts
.GetByID(Convert.ToInt32(Request["ExpertID"]));
Response.Buffer = true;
Response.Clear();
Response.ContentType = fileType;
Response.OutputStream.Write(expert.Image, 0, expert.Image.Length);
Response.Flush();
Response.End();
}
然后在需要显示图片的页面中加入Image控件,将控件的ImageUrl指向这个页面即可:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
ImageExpert.ImageUrl = string.Format("ShowImage.aspx?ExpertID={0}", Request["ExpertID"]);
这样就完成了往数据库中存取图片的功能。