网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > ASP.Net精品代码 > 正文

谈c#数据库存取图片的方式

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

近来做了不少关于这块的功能 ,随着网络的飞速发展,网络存取图片已不再是神话,而成为了一种时尚,如果是你 是用Asp.net开发的话,可能更多的人会考虑使用数据库存储图片的路经,而在文件夹是存储图片的方式。这种方式主要的方法有两个一个就是怎么样读取图片,怎么样存储图上,读取的话我就不多说的这个是最简单的了,只要大家把地址=给存储图片的对象就行了,在取的时候一般要使用相对地址也就是“~” 如下所示

  1. ImageUrl="../CardDeal/SellCardZhi.jpg'  
  2. ImageUrl="~/CardDeal/SellCardZhi.jpg'  

当然这前面要加上你自己的图片所在服务器的文件夹的名称
我们来看是一下是怎么存储的吧,我常用的一个方法是这样的

  1. /// <summary> 
  2.    /// 上传图片 
  3.    /// </summary> 
  4.    /// <param name="FUSShopURL">FileUpload对象</param> 
  5.    /// <param name="UpladURL">图片要放到的目录名称</param> 
  6.    /// <returns>如果FileUpload不为空则返回上传后的图片位置,否则返回为空字符</returns> 
  7.    public  static  string  uploadImage(FileUpload FUSShopURL, string UpladURL) 
  8.    { 
  9.        if (FUSShopURL.HasFile) 
  10.        { 
  11.            //获取当前的时间,一当作图片的名字 
  12.            string fileName = DateTime.Now.ToString("yyyyMMddhhmmss") + DateTime.Now.Millisecond.ToString(); 
  13.            //获取图片的扩展名 
  14.            string Extent = System.IO.Path.GetExtension(FUSShopURL.PostedFile.FileName); 
  15.            //重命名图片 
  16.            fileName += Extent; 
  17.            //设置上传图片保存的文件夹 
  18.            string dir = System.Web.HttpContext.Current.Server.MapPath(UpladURL); 
  19.            //指定图片的路径及文件名 
  20.            string path = dir + "\\" + fileName; 
  21.            //把上传得图片保存到指定的文件加中 
  22.            FUSShopURL.PostedFile.SaveAs(path); 
  23.            return  fileName; 
  24.        } 
  25.        else 
  26.        { 
  27.            return ""
  28.        } 
  29.    } 

这个方法是与FileUpload控件 一起使用的,方法很简单大家一看就明白了。
方法返回的就是一个相对的路经可以直接存储的数据里,然后从前台调用就可以了

第二种方式 直接把图片的Base64String码进行存取

          这种方法很方便,直接转化一下就行了,不需要书写很麻烦的路经问题
先看一下是怎么存储到数据库的吧
 

  1. //选择图片 
  2.         private void button1_Click(object sender, EventArgs e) 
  3.         { 
  4.             OpenFileDialog openfile = new OpenFileDialog(); 
  5.             openfile.Title = "请选择客户端longin的图片"
  6.             openfile.Filter = "Login图片(*.jpg;*.bmp;*png)|*.jpeg;*.jpg;*.bmp;*.png|AllFiles(*.*)|*.*"
  7.             if (DialogResult.OK == openfile.ShowDialog()) 
  8.             { 
  9.                 try 
  10.                 { 
  11.                     Bitmap bmp = new Bitmap(openfile.FileName); 
  12.                     pictureBox1.Image = bmp; 
  13.                     pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; 
  14.                     MemoryStream ms = new MemoryStream(); 
  15.                     bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
  16.                     byte[] arr = new byte[ms.Length]; 
  17.                     ms.Position = 0; 
  18.                     ms.Read(arr, 0, (int)ms.Length); 
  19.                     ms.Close(); 
  20.                     //直接返这个值放到数据就行了 
  21.                     pic = Convert.ToBase64String(arr); 
  22.                 } 
  23.                 catch { } 
  24.             } 
  25.         } 

读取的方法也很简单, pic就是我们得到的图片字符串只要我们存储到数据库里,从下面的方法里读取就可以了
需要注意的地方我都加的有注释

  1. //加载图片 
  2.         private void Form1_Load(object sender, EventArgs e) 
  3.         { 
  4.             try 
  5.             { 
  6.                // pic=........这一句换成从数据库里读取就可以了 
  7.                 //判断是否为空,为空时的不执行 
  8.                 if (!string.IsNullOrEmpty(pic)) 
  9.                 { 
  10.                     //直接返Base64码转成数组 
  11.                     byte[] imageBytes = Convert.FromBase64String(pic); 
  12.                     //读入MemoryStream对象 
  13.                     MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length); 
  14.                     memoryStream.Write(imageBytes, 0, imageBytes.Length); 
  15.                     //转成图片 
  16.                     Image image = Image.FromStream(memoryStream); 
  17.  
  18.                     //memoryStream.Close();//不要加上这一句否则就不对了 
  19.  
  20.                     // 将图片放置在 PictureBox 中 
  21.                     this.pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; 
  22.                     this.pictureBox1.Image = image; 
  23.                 } 
  24.             } 
  25.             catch { } 
  26.         } 

 

大家看一下效果吧

 在这里我们只要单击选择图片直接就可以更换。这些很简单但是我个人感觉还是很常用的,而且网上关于这块的例子着实不少,不过真正能帮上忙的还真不多,因为我们的好几个项目里用到了这些方法,或多或少的还是有些员工不怎么会, 在这里贴一贴方便新手查看吧。呵呵

下面的本例子的所有代码

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.ComponentModel; 
  4. using System.Data; 
  5. using System.Drawing; 
  6. using System.Linq; 
  7. using System.Text; 
  8. using System.Windows.Forms; 
  9. using System.IO; 
  10. using System.Threading; 
  11.  
  12. namespace WindowsFormsApplication1 
  13.     public partial class Form1 : Form 
  14.     { 
  15.         public Form1() 
  16.         { 
  17.             InitializeComponent(); 
  18.         } 
  19.  
  20.         string pic = ""
  21.         //加载图片 
  22.         private void Form1_Load(object sender, EventArgs e) 
  23.         { 
  24.             try 
  25.             { 
  26.                 if (!string.IsNullOrEmpty(pic)) 
  27.                 { 
  28.                     byte[] imageBytes = Convert.FromBase64String(pic); 
  29.                     MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length); 
  30.                     memoryStream.Write(imageBytes, 0, imageBytes.Length); 
  31.                     Image image = Image.FromStream(memoryStream); 
  32.  
  33.                     // 将图片放置在 PictureBox 中 
  34.                     this.pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; 
  35.                     this.pictureBox1.Image = image; 
  36.                 } 
  37.             } 
  38.             catch { } 
  39.         } 
  40.  
  41.         //选择图片 
  42.         private void button1_Click(object sender, EventArgs e) 
  43.         { 
  44.             OpenFileDialog openfile = new OpenFileDialog(); 
  45.             openfile.Title = "请选择客户端longin的图片"
  46.             openfile.Filter = "Login图片(*.jpg;*.bmp;*png)|*.jpeg;*.jpg;*.bmp;*.png|AllFiles(*.*)|*.*"
  47.             if (DialogResult.OK == openfile.ShowDialog()) 
  48.             { 
  49.                 try 
  50.                 { 
  51.                     Bitmap bmp = new Bitmap(openfile.FileName); 
  52.                     pictureBox1.Image = bmp; 
  53.                     pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; 
  54.                     MemoryStream ms = new MemoryStream(); 
  55.                     bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
  56.                     byte[] arr = new byte[ms.Length]; 
  57.                     ms.Position = 0; 
  58.                     ms.Read(arr, 0, (int)ms.Length); 
  59.                     ms.Close(); 
  60.                     pic = Convert.ToBase64String(arr); 
  61.                 } 
  62.                 catch { } 
  63.             } 
  64.         } 
  65.     } 

第三种方式 读成二进制后进行存取

   先把图片读成二进制以后再做处理,这样快捷而且代码相对少很多,还有就是感谢下面几位网友的提醒和建议,在这里我把我简单写的代码贴一下,怎么样存储到数据库的方法还是大家自己写我只提供存取的方法

  1. private void button1_Click(object sender, EventArgs e) 
  2.        { 
  3.            OpenFileDialog openfile = new OpenFileDialog(); 
  4.            openfile.Title = "请选择客户端longin的图片"
  5.            openfile.Filter = "Login图片(*.jpg;*.bmp;*png)|*.jpeg;*.jpg;*.bmp;*.png|AllFiles(*.*)|*.*"
  6.            if (DialogResult.OK == openfile.ShowDialog()) 
  7.            { 
  8.                try 
  9.                { 
  10.                    //读成二进制 
  11.                    byte[] bytes = File.ReadAllBytes(openfile.FileName); 
  12.                    //直接返这个存储到数据就行了cmd.Parameters.Add("@image", SqlDbType.Image).Value = bytes; 
  13.  
  14.                    //输出二进制  在这里把数据中取到的值放在这里byte[] bytes=(byte[])model.image; 
  15.                    pictureBox1.Image = System.Drawing.Image.FromStream(new MemoryStream(bytes)); 
  16.                    this.pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; 
  17.  
  18.                    // 如果保存成文件: 
  19.                    File.WriteAllBytes(@"d:\text.jpg", bytes); 
  20.                } 
  21.                catch { } 
  22.            } 
  23.        } 

 

  • 上一篇资讯: JS关键字加亮
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师