好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

asp.net(c#)上传图片到数据库

asp.net(c#)上传图片到数据库

这几天一直在忙,怎么把图片保存到数据库中,在前台的图片切换中自动从数据库中检索最新的图片显示,按照这个过程,我首先讲一下我这几天的所得,因为也是刚学,又从网上查资料,也是找自己能看懂的来运用的,不难有与别人不一样的地方。

        其实,在数据库中是不能直接保存图片类型的。编程人员一般采取两种方法来保存图片:

        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是不一样的,这里不介绍了。以上是我的一些做法,有疑惑的回帖探讨。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于asp.net(c#)上传图片到数据库的详细内容...

  阅读:39次