asp.net对数据库中图片的上传与读取[转载]
一、向数据库添加图片
1. UserInfo
2. 数据层 Framework.Sys.DAL.User:
3. 业务层 Framework.Sys.BLL.User:
4. UI层:(UserPhotoAdd.aspx)
(1)前台代码:(注意img 的src 属性设为显示图片的页面)
(2)后台代码:
二、从数据库读取图片
1. 数据层:(Framework.Sys.DAL.User)
2. 业务层:(Framework.Sys.BLL.User)
3. UI层:(UserPhoto.aspx)
(1)前台代码:无
(2)后台代码:
1. UserInfo
#region 用户实体
public class UserInfo
{
#region 属性-----------------------------------------------------------
#region 个人信息
private Int32 m_UserID;//用户ID
private String m_UserName; //用户名
/// <summary>
/// 用户ID
/// </summary>
public Int32 UserID
{
get { return m_UserID; }
set { m_UserID = value; }
}
///<summary>
///用户登录时使用的名称
///</summary>
public String UserName
{
get { return m_UserName; }
set { m_UserName = value; }
}
private Byte[] _Photo;
///<summary>
///照片
///</summary>
public Byte[] Photo
{
get { return _Photo; }
set { _Photo = value; }
}
private string _ImageType;
///<summary>
///照片格式
///</summary>
public String ImageType
{
get { return _ImageType; }
set { _ImageType = value; }
}
#endregion
#endregion
#region 构造函数-------------------------------------------------------
/// <summary>
/// 构造函数
/// </summary>
public UserInfo()
{ }
/// <summary>
/// 设置用户信息
/// </summary>
public UserInfo(DataRow dataRow)
{
m_UserID = (int)dataRow["UserID"];
m_UserName = (string)dataRow["UserName"];
_ImageType = dataRow["ImageType"] == System.DBNull.Value ? string.Empty : dataRow["ImageType"].ToString();
_Photo = dataRow["Photo"] == System.DBNull.Value ? new byte[0] : (byte[])dataRow["Photo"];
}
#endregion
}
#endregion
public class UserInfo
{
#region 属性-----------------------------------------------------------
#region 个人信息
private Int32 m_UserID;//用户ID
private String m_UserName; //用户名
/// <summary>
/// 用户ID
/// </summary>
public Int32 UserID
{
get { return m_UserID; }
set { m_UserID = value; }
}
///<summary>
///用户登录时使用的名称
///</summary>
public String UserName
{
get { return m_UserName; }
set { m_UserName = value; }
}
private Byte[] _Photo;
///<summary>
///照片
///</summary>
public Byte[] Photo
{
get { return _Photo; }
set { _Photo = value; }
}
private string _ImageType;
///<summary>
///照片格式
///</summary>
public String ImageType
{
get { return _ImageType; }
set { _ImageType = value; }
}
#endregion
#endregion
#region 构造函数-------------------------------------------------------
/// <summary>
/// 构造函数
/// </summary>
public UserInfo()
{ }
/// <summary>
/// 设置用户信息
/// </summary>
public UserInfo(DataRow dataRow)
{
m_UserID = (int)dataRow["UserID"];
m_UserName = (string)dataRow["UserName"];
_ImageType = dataRow["ImageType"] == System.DBNull.Value ? string.Empty : dataRow["ImageType"].ToString();
_Photo = dataRow["Photo"] == System.DBNull.Value ? new byte[0] : (byte[])dataRow["Photo"];
}
#endregion
}
#endregion
2. 数据层 Framework.Sys.DAL.User:
/// <summary>
/// 添加照片
/// </summary>
public bool AddPhoto(UserInfo currentUser)
{
string sql = "update Sys_Users set [Photo]=@Photo,[ImageType]=@ImageType where [UserID]=@UserID";
SqlParameter[] parameters ={
new SqlParameter("@UserID", SqlDbType.Int, 4),
new SqlParameter("@Photo", SqlDbType.Image, 16), //注意参数类型
new SqlParameter("@ImageType", SqlDbType.NVarChar, 50)};
parameters[0].Value = currentUser.UserID;
parameters[1].Value = currentUser.Photo;
parameters[2].Value = currentUser.ImageType;
int rowsAffected = 0;
RunSQL(sql, ref rowsAffected, parameters);
return (rowsAffected > 0);
}
/// 添加照片
/// </summary>
public bool AddPhoto(UserInfo currentUser)
{
string sql = "update Sys_Users set [Photo]=@Photo,[ImageType]=@ImageType where [UserID]=@UserID";
SqlParameter[] parameters ={
new SqlParameter("@UserID", SqlDbType.Int, 4),
new SqlParameter("@Photo", SqlDbType.Image, 16), //注意参数类型
new SqlParameter("@ImageType", SqlDbType.NVarChar, 50)};
parameters[0].Value = currentUser.UserID;
parameters[1].Value = currentUser.Photo;
parameters[2].Value = currentUser.ImageType;
int rowsAffected = 0;
RunSQL(sql, ref rowsAffected, parameters);
return (rowsAffected > 0);
}
3. 业务层 Framework.Sys.BLL.User:
/// <summary>
/// 添加照片
/// </summary>
public bool AddPhoto(UserInfo currentUser)
{
return dataUser.AddPhoto(currentUser);
}
/// 添加照片
/// </summary>
public bool AddPhoto(UserInfo currentUser)
{
return dataUser.AddPhoto(currentUser);
}
4. UI层:(UserPhotoAdd.aspx)
(1)前台代码:(注意img 的src 属性设为显示图片的页面)
<img src="UserPhoto.aspx" height="200" width="300" />
<br />
<asp:FileUpload ID="upPhoto" runat="server" />
<asp:Button Text=" 添 加 " runat="server" ID="btnAddPhoto" OnClick="btnAddPhoto_Click" />
<br />
<asp:FileUpload ID="upPhoto" runat="server" />
<asp:Button Text=" 添 加 " runat="server" ID="btnAddPhoto" OnClick="btnAddPhoto_Click" />
(2)后台代码:
Framework.Sys.BLL.User myBiz = new Framework.Sys.BLL.User();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnAddPhoto_Click(object sender, EventArgs e)
{
Response.Clear();
int imgSize = upPhoto.PostedFile.ContentLength;//图片的大小
string imgType = upPhoto.PostedFile.ContentType;//图片类型
Stream imgStream = upPhoto.PostedFile.InputStream;//读取图片
Byte[] buff = new Byte[imgSize];
//方法1
imgStream.Read(buff, 0, imgSize);
//方法2
//BinaryReader rd = new BinaryReader(imgStream);
//rd.Read(buff, 0, imgSize);
UserInfo user = new UserInfo();
user.UserID = 9;
user.Photo = buff;//***
user.ImageType = imgType;
if (myBiz.AddPhoto(user))
base.WriteLine("添加成功");
else
base.WriteLine("添加失败");
Response.End();
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnAddPhoto_Click(object sender, EventArgs e)
{
Response.Clear();
int imgSize = upPhoto.PostedFile.ContentLength;//图片的大小
string imgType = upPhoto.PostedFile.ContentType;//图片类型
Stream imgStream = upPhoto.PostedFile.InputStream;//读取图片
Byte[] buff = new Byte[imgSize];
//方法1
imgStream.Read(buff, 0, imgSize);
//方法2
//BinaryReader rd = new BinaryReader(imgStream);
//rd.Read(buff, 0, imgSize);
UserInfo user = new UserInfo();
user.UserID = 9;
user.Photo = buff;//***
user.ImageType = imgType;
if (myBiz.AddPhoto(user))
base.WriteLine("添加成功");
else
base.WriteLine("添加失败");
Response.End();
}
二、从数据库读取图片
1. 数据层:(Framework.Sys.DAL.User)
public DataRow Retrieve(int userID)
{
string sql = "SELECT Sys_Users.* WHERE UserID ={0}";
sql = string.Format(sql, userID);
using (DataSet users = RunSQL(sql, "Users"))
{
return users.Tables[0].Rows[0];
}
}
{
string sql = "SELECT Sys_Users.* WHERE UserID ={0}";
sql = string.Format(sql, userID);
using (DataSet users = RunSQL(sql, "Users"))
{
return users.Tables[0].Rows[0];
}
}
2. 业务层:(Framework.Sys.BLL.User)
public UserInfo Retrieve(int userID)
{
DataRow userRow = dataUser.Retrieve(userID);
return new UserInfo(userRow);
}
{
DataRow userRow = dataUser.Retrieve(userID);
return new UserInfo(userRow);
}
3. UI层:(UserPhoto.aspx)
(1)前台代码:无
(2)后台代码:
Framework.Sys.BLL.User myBiz = new Framework.Sys.BLL.User();
protected void Page_Load(object sender, EventArgs e)
{
HttpContext.Current.Response.ClearContent();
try
{
UserInfo user = myBiz.Retrieve(9);
Response.ContentType = user.ImageType;
Response.BinaryWrite(user.Photo);
}
catch (Exception exc)
{
throw new Framework.AppException(exc.Message);
}
HttpContext.Current.Response.End();
}
protected void Page_Load(object sender, EventArgs e)
{
HttpContext.Current.Response.ClearContent();
try
{
UserInfo user = myBiz.Retrieve(9);
Response.ContentType = user.ImageType;
Response.BinaryWrite(user.Photo);
}
catch (Exception exc)
{
throw new Framework.AppException(exc.Message);
}
HttpContext.Current.Response.End();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!