上传和显示图片
今天,和大家讨论一下在ASP.NET中,如何上传图片至数据库,然后再将图片读取显示的问题。欢迎高手提出自己的方法!!!
目前,我主要用到以下两种方法:
1:上传图片的相对路径到数据库中相应字段里,读取显示时,将控件(假设用的是Image控件)的ImageUrl属性指向该相对路径即可。
2:将图片以二进制流的方式整体上传到数据库里,读取显示时,以二进制流的方式整体读出。这种方法稍微麻烦一点,但保存的是图片整体到数据库里。
第一种方法,实现起来比较简单,因为存入数据库里的只是图片相对路径,当然,同时也就有很大的局限性,由于是相对路径,所以当本地的图片变换了位置
或移除,或是在其他主机上浏览该图片时,就无法显示了。第二种方法,就比较灵活了,可以用在交互性的页面,比如校友录,因为上传的是整张图片,所
以只要读取正确,就能任何主机上显示出来。
下面,分别通过实际的代码,介绍这两种方法。
在这两个方法里,我将用到一个控件:FileUpload,该控件的具体用法参见百度谷歌。。。学习过程中,最好的老师就是他们俩。
1:上传图片相对路径,并读取显示。
数据库里的字段很简单,就两个
Image_ID int identity(1,1) primarykey not null
Image_Wpath varchar(50) null
Image_Wpath 用来保存图片的相对路径
这里注意,我需要上传的文件都放在文件夹“Image”,在后面的上传路径里就需要这个文件夹。
我在输入框里填入Image_ID的值,读取指定的图片,在图片的下面,显示出该图片的相对路径。
接下来,我们看一下具体代码实现上传和读取显示功能。
在项目里,有一个sqlHelper类,是一些常用的数据访问方法。这里就不详细讲了。
上传按钮里的事件:
{
string name = FileUpload1.FileName; //获取文件名
string type = name.Substring(name.LastIndexOf(".") + 1); //获取文件类型
string ipath = Server.MapPath("Image") + "\" + name; //获取文件路径
string wpath = "Image\" + name; //[color=red]设置文件保存相对路径(这里的路径起始就是我们存放图片的文件夹名)[/color]
string query1 = "insert into Images values('" + wpath + "')";
if (type == "jpg" || type == "gif" || type == "bmp" || type == "png")
{
FileUpload1.SaveAs(ipath); //服务器保存路径
sqlHelper.ExecterNonQuery(query1);
}
}
显示按钮事件:
{
string query2 = "select * from Images where Image_ID=" + Convert.ToInt32(TextBox1.Text);
SqlDataReader sdr = sqlHelper.GetReader(query2);
string wpath2 = "";
while (sdr.Read())
{
wpath2 = sdr[1].ToString(); //获得相对路径
}
sdr.Close();
Image1.ImageUrl = wpath2; //图片显示路径就是相对路径
Label1.Text = wpath2; //显示相对路径
string sBBsModuleImg = ConfigurationManager.AppSettings["BBsModuleImg"].ToString();
UpLoader uploader = new UpLoader();
//获取上传图片文件名
string sImg = "";
HttpPostedFile postedFileImg = this.FileUpload1.PostedFile;
if (postedFileImg.ContentLength > 0 && !string.IsNullOrEmpty(postedFileImg.FileName))
{
sImg = uploader.UpLoaderPic(postedFileImg, sBBsModuleImg, 1);
if (sImg == "")
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('图片文件上传不成功,数据无法保存!')", true);
return;
}
else
sImg = "/bbs/module/" + sImg;
}
}