• 推荐
  • 评论
  • 收藏

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

2022-11-11    7203次浏览

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

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

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

原文地址:https://www.cnblogs.com/Leo_wl/p/2001547.html