上一次用到这样的功能是在去年的时候,是在开发一个彩信接收的管理平台,使用的是ASP.NET+Oracle,事隔已久,今天突然需要用到这个功能,不过存储的数据库是SQL SERVER2000,于是将实现的方法写上来。同时在后面这个功能源文件的下载。
在VS2005中新建好一个项目,两个.aspx文件,一个用来上传图片、另一个用来显示上传的图片。一般的情况下大家开发都是将图片存放在服务器的某个文件夹下面,采用直接读取文件的方式来完成图像文件的在程序应用中的使用;但是在某些场合可能需要用到将图片保存在数据库中以求达到更好的保密性等。比如OA中对于公司电子印章的保存、人事系统中人员寸照等等地方。
上传图片的界面:
保存图片部分代码:
protected void Btn_Save_Click(object sender, EventArgs e)
{
int ImageLen = this.FileUpload1.PostedFile.ContentLength;
byte[] Image = new byte[ImageLen];
this.FileUpload1.PostedFile.InputStream.Read(Image, 0, ImageLen);
SqlConnection Conn = new SqlConnection(@"server=localhost;database=Test;uid=test;pwd=123456");
Conn.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO Images_Info (Image_Name,Image_Content) VALUES (@Image_Name,@Image_Content)",Conn);
cmd.Parameters.Add("@Image_Name", SqlDbType.VarChar);
cmd.Parameters.Add("@Image_Content", SqlDbType.Image);
cmd.Parameters[0].Value = this.TextBox1.Text.ToString();
cmd.Parameters[1].Value = Image;
cmd.ExecuteNonQuery();
}
显示图片的界面:
显示图片部分代码:
protected void Page_Load(object sender, EventArgs e)
{
MemoryStream Stream = new MemoryStream();
SqlConnection Conn = new SqlConnection(@"server=localhost;database=Test;uid=test;pwd=123456");
Conn.Open();
SqlCommand cmd = new SqlCommand("SELECT Image_Content FROM Images_Info Order BY Image_ID ASC", Conn);
byte[] image = (byte[])cmd.ExecuteScalar();
Stream.Write(image, 0, image.Length);
Bitmap bitmap = new Bitmap(Stream);
Response.ContentType = "image/gif";
bitmap.Save(Response.OutputStream, ImageFormat.Gif);
}