asp.net(c#)上传图片到数据库
2011-03-31 21:54
295 查看
这几天一直在忙,怎么把图片保存到数据库中,在前台的图片切换中自动从数据库中检索最新的图片显示,按照这个过程,我首先讲一下我这几天的所得,因为也是刚学,又从网上查资料,也是找自己能看懂的来运用的,不难有与别人不一样的地方。
其实,在数据库中是不能直接保存图片类型的。编程人员一般采取两种方法来保存图片:
1、用来保存图片在服务器的虚拟路径;
2、直接保存图片转换后的二进制数据流;
在实际开发中,这两种都可以,但是各有各的优缺点。
第一种方法,存取路径,当然比较简单,我们用Image控件的话,只要读取其路径,给了Image控件的ImageURL就可以了,但是它的缺点也就在于这个路径。如果本地的图片路径变换了或者什么的,在其他机子上就无法显示了,因此这种方法必须是文件夹一定。也给维护带来一定的麻烦。
第二种方法,存取二进制数据流,这里存的就是图片的另一种格式,从某种角度就是图片本身,所以在取出来显示的话,只要图片正确,就能正确显示。
这里我会用例子分别给大家演示怎么王数据库里存取图片。
我们先来看第一个例子吧,这里用到FileUpload控件。很简单,大家拖过来使用就是了。
////获取文件名
string name = this.FileUpload1.FileName;
//获取文件类型
string type = name.Substring(name.LastIndexOf(".") + 1);
//获取文件的路径
string ipath = Server.MapPath("image") + "\\" + name;
//设置文件保存的路径
string wpath = "image\\" + name;
string query1 = "insert into image(path) values(@path)";
if (type == "jpg" || type == "gif" || type == "bmp" || type == "png")
{
FileUpload1.SaveAs(ipath); //服务器保存路径
SqlConnection cn = new SqlConnection("server=.;uid=sa;pwd=***;database=za");
SqlCommand cm = new SqlCommand(query1);
cm.Connection = cn;
cn.Open ();
cm.Parameters.Add("@path",SqlDbType.VarChar ,50);
cm.Parameters["@path"].Value = wpath;
cm.ExecuteNonQuery();
cn.Close();
}
Response.Write("<script>保存成功</script>");
这里我们首先获取的是客户端用FileUpload控件上传的文件的名称。然后获取文件的类型,这里用到了分割字符串的方法SubString(),首先找到最后一个‘.’所在的索引,因为索引是从零开始的,因此再加上1,分割完后,用Server对象的MapPath方法找到它的服务器上的路径,这里给定了它的文件夹就是image。然后判断类型是不是属于JPEG、GIF的等等,然后将文件先保存到image文件夹里,这里用到的是FileUpload控件的方法,saveas(),将其保存在服务器指定的位置。其他的就不用多解释了。
第二种方法:就是在存取的时候先将图片变成二进制流,再保存到数据库中,在读取的时候同样先变成二进制流再变成图片。
string name = FileUpload1.PostedFile.FileName;
string type=name .Substring (name .LastIndexOf (".")+1);
FileStream fs = File.OpenRead(name);
byte[] content=new byte [fs.Length];
fs.Read(content, 0, content.Length);
fs.Close();
SqlConnection cn = new SqlConnection("server=.;uid=sa;pwd=****;database=za");
SqlCommand cm = new SqlCommand("insert into myimage(imagedata) values(@imagedata)",cn);
cn.Open();
if (type == "jpg" || type == "gif" || type == "bmp" || type == "png")
{
cm.Parameters.Add("@imagedata", SqlDbType.Image);
cm.Parameters["@imagedata"].Value = content;
cm.ExecuteNonQuery();
cn.Close();
}
Response.Write("保存成功");
这里我们用FileStream来读取流,并把读取出来的二进制流放到byte[]数组中。fs.Read(content, 0, content.Length)这个Read方法就是将读到的流放到给定的缓冲区中。然后将二进制流保存到数据库中就可以了。
我用的是SQL2000,SQL2000里用来存储图片的类型是image,2005是不一样的,这里不介绍了。以上是我的一些做法,有疑惑的回帖探讨。
其实,在数据库中是不能直接保存图片类型的。编程人员一般采取两种方法来保存图片:
1、用来保存图片在服务器的虚拟路径;
2、直接保存图片转换后的二进制数据流;
在实际开发中,这两种都可以,但是各有各的优缺点。
第一种方法,存取路径,当然比较简单,我们用Image控件的话,只要读取其路径,给了Image控件的ImageURL就可以了,但是它的缺点也就在于这个路径。如果本地的图片路径变换了或者什么的,在其他机子上就无法显示了,因此这种方法必须是文件夹一定。也给维护带来一定的麻烦。
第二种方法,存取二进制数据流,这里存的就是图片的另一种格式,从某种角度就是图片本身,所以在取出来显示的话,只要图片正确,就能正确显示。
这里我会用例子分别给大家演示怎么王数据库里存取图片。
我们先来看第一个例子吧,这里用到FileUpload控件。很简单,大家拖过来使用就是了。
////获取文件名
string name = this.FileUpload1.FileName;
//获取文件类型
string type = name.Substring(name.LastIndexOf(".") + 1);
//获取文件的路径
string ipath = Server.MapPath("image") + "\\" + name;
//设置文件保存的路径
string wpath = "image\\" + name;
string query1 = "insert into image(path) values(@path)";
if (type == "jpg" || type == "gif" || type == "bmp" || type == "png")
{
FileUpload1.SaveAs(ipath); //服务器保存路径
SqlConnection cn = new SqlConnection("server=.;uid=sa;pwd=***;database=za");
SqlCommand cm = new SqlCommand(query1);
cm.Connection = cn;
cn.Open ();
cm.Parameters.Add("@path",SqlDbType.VarChar ,50);
cm.Parameters["@path"].Value = wpath;
cm.ExecuteNonQuery();
cn.Close();
}
Response.Write("<script>保存成功</script>");
这里我们首先获取的是客户端用FileUpload控件上传的文件的名称。然后获取文件的类型,这里用到了分割字符串的方法SubString(),首先找到最后一个‘.’所在的索引,因为索引是从零开始的,因此再加上1,分割完后,用Server对象的MapPath方法找到它的服务器上的路径,这里给定了它的文件夹就是image。然后判断类型是不是属于JPEG、GIF的等等,然后将文件先保存到image文件夹里,这里用到的是FileUpload控件的方法,saveas(),将其保存在服务器指定的位置。其他的就不用多解释了。
第二种方法:就是在存取的时候先将图片变成二进制流,再保存到数据库中,在读取的时候同样先变成二进制流再变成图片。
string name = FileUpload1.PostedFile.FileName;
string type=name .Substring (name .LastIndexOf (".")+1);
FileStream fs = File.OpenRead(name);
byte[] content=new byte [fs.Length];
fs.Read(content, 0, content.Length);
fs.Close();
SqlConnection cn = new SqlConnection("server=.;uid=sa;pwd=****;database=za");
SqlCommand cm = new SqlCommand("insert into myimage(imagedata) values(@imagedata)",cn);
cn.Open();
if (type == "jpg" || type == "gif" || type == "bmp" || type == "png")
{
cm.Parameters.Add("@imagedata", SqlDbType.Image);
cm.Parameters["@imagedata"].Value = content;
cm.ExecuteNonQuery();
cn.Close();
}
Response.Write("保存成功");
这里我们用FileStream来读取流,并把读取出来的二进制流放到byte[]数组中。fs.Read(content, 0, content.Length)这个Read方法就是将读到的流放到给定的缓冲区中。然后将二进制流保存到数据库中就可以了。
我用的是SQL2000,SQL2000里用来存储图片的类型是image,2005是不一样的,这里不介绍了。以上是我的一些做法,有疑惑的回帖探讨。
相关文章推荐
- ASP.NET C#(4.0) + SQL2008 R2 多图片上传并生成缩略图一并保存至数据库
- 将上传图片打上防伪图片水印并写入数据库ASP.NET C#
- ASP.NET下上传图片到数据库,并且读出图片的代码(详细版)
- asp.net 上传图片到数据库(不是文件夹)
- 在ASP.NET中上传图片并生成缩略图的C#源码 (转载)
- 用asp.net实现将上传的图片变小存入数据库!(暑假里就开始想做的,很兴奋了)
- ASP.NET(C#) 实现将图片以二进制保存到数据库中 转
- 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- asp.net C#如何上传指定路径的图片,不用FileUpload控件[转]
- ASP.NET MVC 4 - 上传图片到数据库
- ASP.NET(C#)上传图片加上文字或图片水印
- CKEDITOR+CKFINDER的图片上传配置(C#/asp.net/php)(转载)
- ASP.NET上传图片到数据库并加水印
- 在ASP.NET中上传图片并生成缩略图的C#源码
- ASP.NET MVC 4 - 上传图片到数据库
- ASP.NET中常用功能代码总结(上传图片到数据库,从数据库中读取图片)
- ASP.NET 上传图片至数据库并读取图片显示
- C# Asp.net 修改Ueditor编辑器上传图片保存路径
- 图片文件上传, 生成高质量缩略图 (asp.net c#)
- Asp.net(C#)读取数据库并生成JS文件制作首页图片切换效果(附demo源码下载)