向数据库存储读取图片方法总结

原文链接:http://blog.csdn.net/baobaolaogong/article/details/7575543
附jabc数据库驱动官方下载链接:https://www.mysql.com/products/connector/

1.首先创建一个数据表SaveImageTest

ImageID:uniqueidentifier 主键
ImageType:varchar(32) 图片类型
ImageName:varchar(128) 图片名称
ImageContent:image 图片内容
ImageUrl:varchar(128) 图片存储路径

2.向数据库存储图片

2.1使用字节流的方式获取上传图片的内容

<span style="font-size:12px;color:#000000;">
 #region 获取图片内容方法一:通用方法,用用文件流的方式读取图片内容

                //读取图片流
                imgStream.Read(imageContent, 0, imageSize);
                imgStream.Close();

                #endregion</span>

2.2使用上传文件控件的GetByte属性获取图片内容

<span style="font-size:12px;color:#000000;">#region 获取图片方法二:快捷方法 用上传控件的属性获取上传文件的字节数组  

                imageContent = fupLoadImage.FileBytes;  

                #endregion</span>  

3.从数据库读取图片内容,显示在页面
3.1读取流,直接显示在当前页面
[csharp] view plain copy
<span style="font-size:12px;color:#000000;">/// <summary>  
    /// 读取图片方法1,触发后直接显示在本页面,但图片显示后其他控件不可见  
    /// </summary>  
    private void ReadImage()  
    {  

        string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='93B23E88-1F56-4C9E-BFAF-67126E1389B2' ");  

        SqlDataReader sqlRead = kpSql.ReadStu(sql, false);  

        while (sqlRead.Read())  
        {  
            Response.ContentType = sqlRead["ImageType"].ToString();  
            Response.BinaryWrite((byte[])sqlRead["ImageContent"]);  

        }  
        kpSql.CloseConn();  

    }</span>  

3.2使用Image控件显示图片

为了灵活展示图片,满足实际需求,可添加一个新的页面,并用读取流的方法读取图片,将路径赋值给本页面的Image控件的ImageUrl即可

<span style="font-size:12px;color:#000000;">  /// <summary>  
    /// 读取数据库图片方法二  
    /// 在本页面的适当位置添加image服务器控件,将需要的图片显示在另一个页面,给image控件的url赋值即可  
    /// </summary>  
    private void ReadImage2()  
    {  
        this.imgReadImage.ImageUrl = "OutPutImage.aspx";  
    }  
</span>  


4.利用路径实现图片的保存及读取
在实际的使用中,往往在服务器中占用一点硬盘控件直接利用图片的路径实现存储和读取,这样不仅能节省数据库空间,也方便频繁的读取存储操作,同时更加安全。
4.1利用路径存储图片
[csharp] view plain copy
<span style="font-size:12px;color:#000000;">#region  方法三:将 图片保存至指定文件夹下  

                //虚拟路径转化为物理路径用Server.MapPath()  
                //if (!Directory.Exists(Server.MapPath("E:\\资料\\ImageStorgeTest\\")))  
                if (!Directory.Exists("E:\\资料\\ImageStorgeTest\\"))  
                {  
                    //若不存在路径则创建该文件夹  
                    Directory.CreateDirectory("E:\\资料\\ImageStorgeTest\\");  
                    //已存在该图片则,生成新的文件名,不覆盖  
                    if (Directory.Exists("E:\\资料\\ImageStorgeTest\\" + imageName))  
                    {  
                       imageUrl=imageUrlBase+Path.GetFileNameWithoutExtension(fupLoadImage.PostedFile.FileName)+"副本"+Path.GetExtension(fupLoadImage.PostedFile.FileName);  

                    }  
                }  
                fupLoadImage.PostedFile.SaveAs(imageUrl);  
                #endregion</span>  

4.2利用路径读取图片
前台控件定义:
[csharp] view plain copy
<span style="font-size:12px;color:#000000;"><td colspan="4">  
                方法四:  
                <img id="imgReadImageByUrl" runat="server" alt=""  width="100" height="150" />  
            </td>  

</span>  
<span style="font-size:12px;color:#000000;"> /// <summary>  
    /// 根据图片存储的路径,赋值给Img标签控件获取图纸  
    /// </summary>  
    private void ReadImage4()  
    {  
        string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='724B53A8-C6E1-4FFC-BC68-D82B743A7846' ");  
      DataTable dt=  kpSql.ExceTable(sql, "SaveImageTest");  
      if (dt.Rows.Count > 0)  
      {  
          this.imgReadImageByUrl.Src = @"E:\\资料\\ImageStorgeTest\\" + dt.Rows[0]["ImageName"].ToString();  
      }  
    }  

</span>  

附:全部代码如下

region 事件函数

  /// <summary>  
   /// 点击确定存储图片到数据库中  
   /// </summary>  
   /// <param name="sender"></param>  
   /// <param name="e"></param>  
   protected void btnSelectImage_Click(object sender, EventArgs e)  
   {  
       //图片类型是否允许上传  
       bool flag = false;  
       if (fupLoadImage.HasFile)  
       {  
           //获取文件扩展名  
           string fileExtension = Path.GetExtension(fupLoadImage.FileName).ToUpper();  
           string[] allowExtension = { ".JPG", ".GIF", ".PNG" };  
           for (int i = 0; i < allowExtension.Length; i++)  
           {  
               if (allowExtension[i].Equals(fileExtension))  
               {  
                   flag = true;  
                   break;  
               }  
           }  
           //类型匹配,可以上传  
           if (flag)  
           {  
               string sqlStr = ConfigurationManager.AppSettings["ConnectionString"].ToString();  
               SqlConnection sqlConn = new SqlConnection(sqlStr);  

               //上传文件的大小  
               int imageSize = fupLoadImage.PostedFile.ContentLength;  
               string imaType = fupLoadImage.PostedFile.ContentType;  
               Stream imgStream = fupLoadImage.PostedFile.InputStream;  
               //fupLoadImage.PostedFile.FileName包含完全路径的名字  
               string imageName = Path.GetFileName(fupLoadImage.PostedFile.FileName);  
               string imageUrlBase = "E:\\资料\\ImageStorgeTest\\";  
               string imageUrl = imageUrlBase + imageName;  
               byte[] imageContent = new byte[imageSize];  


               #region 获取图片内容方法一:通用方法,用用文件流的方式读取图片内容  

               //读取图片流  
               imgStream.Read(imageContent, 0, imageSize);  
               imgStream.Close();  

               #endregion  

               #region 获取图片方法二:快捷方法 用上传控件的属性获取上传文件的字节数组  

               imageContent = fupLoadImage.FileBytes;  

               #endregion  

               #region  方法三:将 图片保存至指定文件夹下  

               //虚拟路径转化为物理路径用Server.MapPath()  
               //if (!Directory.Exists(Server.MapPath("E:\\资料\\ImageStorgeTest\\")))  
               if (!Directory.Exists("E:\\资料\\ImageStorgeTest\\"))  
               {  
                   //若不存在路径则创建该文件夹  
                   Directory.CreateDirectory("E:\\资料\\ImageStorgeTest\\");  
                   //已存在该图片则,生成新的文件名,不覆盖  
                   if (Directory.Exists("E:\\资料\\ImageStorgeTest\\" + imageName))  
                   {  
                       imageUrl = imageUrlBase + Path.GetFileNameWithoutExtension(fupLoadImage.PostedFile.FileName) + "副本" + Path.GetExtension(fupLoadImage.PostedFile.FileName);  

                   }  
               }  
               fupLoadImage.PostedFile.SaveAs(imageUrl);  
               #endregion  
               string sql = @"INSERT INTO SaveImageTest(ImageID,ImageType,ImageName,ImageContent,ImageUrl)  
                       VALUES(NEWID(),@imaType,@imageName,@imageContent,@imageUrl)";  
               SqlCommand comm = new SqlCommand(sql, sqlConn);  

               SqlParameter paramImageType = new SqlParameter("@imaType", SqlDbType.VarChar, 50);  
               paramImageType.Value = imaType;  
               comm.Parameters.Add(paramImageType);  

               SqlParameter paramImageName = new SqlParameter("@imageName", SqlDbType.VarChar, 64);  
               paramImageName.Value = imageName;  
               comm.Parameters.Add(paramImageName);  

               SqlParameter paramImageContent = new SqlParameter("@imageContent", SqlDbType.Image);  
               paramImageContent.Value = imageContent;  
               comm.Parameters.Add(paramImageContent);  

               SqlParameter paramImageUrl = new SqlParameter("@imageUrl", SqlDbType.VarChar, 128);  
               paramImageUrl.Value = imageUrl;  
               comm.Parameters.Add(paramImageUrl);  

               sqlConn.Open();  
               int numRowsAffected = comm.ExecuteNonQuery();  
               sqlConn.Close();  
           }  

       }  
   }  

   #endregion  

   #region 自定义功能函数  

   /// <summary>  
   /// 读取图片方法1,触发后直接显示在本页面,但图片显示后其他控件不可见  
   /// </summary>  
   private void ReadImage()  
   {  

       string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='93B23E88-1F56-4C9E-BFAF-67126E1389B2' ");  

       SqlDataReader sqlRead = kpSql.ReadStu(sql, false);  

       while (sqlRead.Read())  
       {  
           Response.ContentType = sqlRead["ImageType"].ToString();  
           Response.BinaryWrite((byte[])sqlRead["ImageContent"]);  

       }  
       kpSql.CloseConn();  

   }  

   /// <summary>  
   /// 读取数据库图片方法二  
   /// 在本页面的适当位置添加image服务器控件,将需要的图片显示在另一个页面,给image控件的url赋值即可  
   /// </summary>  
   private void ReadImage2()  
   {  
       this.imgReadImage.ImageUrl = "OutPutImage.aspx";  
   }  

   private void ReadImage3()  
   {  
       string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='724B53A8-C6E1-4FFC-BC68-D82B743A7846'");  
       DataTable dt = kpSql.ExceTable(sql, "SaveImageTest");  

       byte[] img = (byte[])dt.Rows[0]["ImageContent"];  
       kpSql.CloseConn();  
       MemoryStream ms = new MemoryStream(img, 0, img.Length);  
       PictureBox picture1 = new PictureBox();  
       picture1.Top = 160;  
       picture1.Left = 200;  
       picture1.Image = Image.FromStream(ms);  

   }  

   /// <summary>  
   /// 根据图片存储的路径,赋值给Img标签控件获取图纸  
   /// </summary>  
   private void ReadImage4()  
   {  
       string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='724B53A8-C6E1-4FFC-BC68-D82B743A7846' ");  
       DataTable dt = kpSql.ExceTable(sql, "SaveImageTest");  
       if (dt.Rows.Count > 0)  
       {  
           this.imgReadImageByUrl.Src = @"E:\\资料\\ImageStorgeTest\\" + dt.Rows[0]["ImageName"].ToString();  
       }  
   }  


   #endregion  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值