问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql里怎么存放图片

发布网友 发布时间:2022-04-23 15:32

我来回答

2个回答

懂视网 时间:2022-04-29 19:53

推荐:《mysql视频教程》

首先,介绍一下mysql相关的数据类型:MySQL中有四种BLOB类型,TinyBlob(最大255Byte), Blob(最大65K), MediunBlob(16M), LongBlob(最大4G)。这里注意一下如果你数据库出现相关的Data too long...字样可能是你选择的种类的大小不够。

接下来简单说一下我为什么没有用存储图片路径的方式,而采取了直接在MySQL中存储图片的方式。原因有两点:

1、本身不需要大量图片,一个数据库只需要一张图片

2、软件结构是要通过WebService由一个主客户端去访问下面附属的几个客户端,如果附属客户端不存储图片直接供主客户端访问,那么主客户端势必就需要一个加载图片的功能(类似于FTP的功能)。

下面还是直接上代码吧:

public bool MapSearchWrite(string strImagePath)
  {
  //将图片转换成缓冲流
  FileStream fs = new FileStream(strImagePath, FileMode.Open, FileAccess.Read);
  
  //获得图片的字节数组
  byte[] byImage = new byte[fs.Length];
  fs.Read(byImage, 0, byImage.Length);
  fs.Close();
  //数据库连接
  MySqlConnection conn = new MySqlConnection();
  conn.ConnectionString = "Server=localhost;Uid=root;Password=123456;Database=firefighting;charset=gb2312";
  try
  {
   conn.Open();
  }
  catch
  {
   conn.Close();
   conn.Dispose();
   throw new ArgumentException("地图检索数据库连接失败");
  }
  //判断数据库内部有无记录
  string strQueryCmd = "select PicNum from images";
  MySqlCommand cmdQuery = new MySqlCommand(strQueryCmd, conn);
  MySqlDataReader dataReader = cmdQuery.ExecuteReader();
  //执行操作
  MySqlCommand cmd = new MySqlCommand();
  if (dataReader.Read())
  {
   cmd.CommandText = "update images set Image=@byImage";
  }
  else
  {
   cmd.CommandText = "insert into images(Image) values(@byImage)";
  }
  
  cmd.CommandType = CommandType.Text;
  cmd.Parameters.Add("@byImage", MySqlDbType.MediumBlob);
  cmd.Parameters[0].Value = byImage;
  cmd.Connection = conn;
  
  int affectedRows = 0;
  try
  {
   affectedRows = cmd.ExecuteNonQuery();
  }
  catch
  {
   affectedRows = -1;
  }
  //关闭连接等
  cmd.Dispose();
  conn.Close();
  conn.Dispose();
  if (affectedRows <= 0)
  {
   return false;
  }
  else
  {
   return true;
  }
  }

这是把图片插入到数据库的操作代码,路径的话就是你所需要存储的图片所在的路径(包括图片的名字和后缀名哦),另外我这里采用的是ADO.NET的连接方式,语言是C#的,其他代码也不用我解释了......

下面是读取MySQL中的图片的代码

 public void MapSearchQuery(out byte[] imageByteResulet)
  {
  imageByteResulet = null;
  MySqlConnection conn = new MySqlConnection();
  conn.ConnectionString = "Server=localhost;Uid=root;Password=123456;Database=firefighting;charset=gb2312";
  try
  {
   conn.Open();
  }
  catch
  {
   conn.Close();
   conn.Dispose();
   throw new ArgumentException("地图检索数据库连接失败");
  }
  string strQueryCmd = "select Image from images limit 1";
  MySqlCommand cmd = new MySqlCommand(strQueryCmd, conn);
  MySqlDataReader dataReader = null;
  try
  {
   dataReader = cmd.ExecuteReader();
  }
  catch
  {
   dataReader.Dispose();
   cmd.Dispose();
   conn.Close();
   conn.Dispose();
   throw new ArgumentException("地图检索查询地图失败");
  }
  if (dataReader.Read())
  {
   imageByteResulet = new byte[dataReader.GetBytes(0, 0, null, 0, int.MaxValue)];
   dataReader.GetBytes(0, 0, imageByteResulet, 0, imageByteResulet.Length);
   //将图片字节数组加载入到缓冲流
   // MemoryStream imageStream = new MemoryStream(imageByte);
   //从缓冲流生成图片
   //imageResulet = Image.FromStream(imageStream, true);
  }
  dataReader.Dispose();
  cmd.Dispose();
  conn.Close();
  conn.Dispose();
  }

当然这里我是照顾到Image对象不能通过WebService传输而把BLOB数据只转换成byte[]在传输,如果不需要这个功能的换可以直接把相关代码踢出来再将byte[]转成图片对象即可,一下提供两种方法

第一种:imageByte是调用上面函数得到的byte[]的数据

//将图片字节数组加载入到缓冲流 
MemoryStream imageStream = new MemoryStream(imageByte);
  //从缓冲流生成图片  
  imageResulet = Image.FromStream(imageStream, true);
  //pictureBox是一个显示图片或者视频的C#控件
  pictureBox.Image = imageResulet;

这样就把图片读取出来并显示出来了

第二种:BitMap是System.Drawingm命名空间中的

Bitmap bm = new Bitmap(new MemoryStream(
imageByte
));
  
 
 pictureBox1.Image = bm;

那么,到此我就说完了,当然不是迫不得已不要把图片存到数据库中,可以做个url映射,返回文件流(这个目前没试过,有时间试过后再把经验分享给大家)。

热心网友 时间:2022-04-29 17:01

你好,很高兴回答你的问题。
一般有两种方式,
一种是将图片序列化后,将序列化的结果存入数据库中。使用时在读出进行反序列化。
另一种是将文件存放到一个位置,将存放的路径存入数据库。使用时按照路径获取图片。
如果有帮助到你,请点击采纳。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
请问昆山正仪到江苏省昆山市出口加工区新竹路99号 怎么坐班车最近? 跪求苏州神达电脑地址!!! 华为运动耳机挂脖式怎么配对 雅酷美挂脖式无线蓝牙防水耳机-运动时尚,自由畅听 已知函数f(x)=cos^2x-sin^2x+2根号3sinxcosx+1 原先微信有联系后来突然对方要求我对他进行朋友验证我没有他电话号码... 已知函数f(x)=cos^2x-sin^2x+2根号3sinxcosx 已知函数fx=cos^2*x-sin^2*x+2sinx*cosx,求fx的最小正周期,并求当... 已知函数f(x)=cos2x-sin2x 4sinx·cosx求f(x)的最小正周期,并求当x为... 已知f(x)=cos^2x-sin^x+2sinxcosx。①求函数最小正周期②当x∈【0... 儿童结核抗体阳性临床意义 mysql存图片麻烦吗? 用什么字段存? 儿童应接种卡介苗能预防传染肺结核吗 mysql数据库可以存图片吗? 儿童打过肺结核疫苗,长大后还会感染肺结核病吗 儿童肺炎和肺结核,都有哪些区别? mysql怎么存储JPG图片?用什么数据类型? 请问在mysql中怎么存储图片呢? 在MySQL中,图片的数据类型是什么 mysql 中存储图片路径 什么类型 你好、MySql存储图片用什么类型呢 2014年岳阳教师招聘考试平江县报考条件? 2013年湖南省岳阳县教师编制考试一般是什么时候?要看哪些书? 2015岳阳县事业单位教师岗招聘199人? 考美术教师编制要买什么书,还有都考哪些科目内容呀?我是湖南岳阳的 我明年要考湖南省岳阳市汨罗的教师编制,我的专业是音乐教育,有谁能给我提供编制考试资料?要详细点的。 想考岳阳市小学英语教师的编制,都需要考什么 请问在岳阳市里考教师编制要楼区的户口么?? 生育险是不是有新政策? 请问岳阳市教师编制考试考什么内容 小儿初次接触结核杆菌出现变态反应的时间 用mysql 如果包含有文字和图片,那么我要用哪种数据类型存储呢?还是分 ... mysql数据库可以存图片路径? 儿童和结核病在一起吃住能传染吗,传染 如何将图片储存在MySQL数据库里? 肺结核是种什么病 mysql能存放图片吗? mysql数据库可以存图片吗 mysql 用什么数据类型能够储存图片路径 Mysql, MSQL等数据库能存放图片、音乐、视频文件吗? mysql中存的图片存成生什么格式 有意义的ID有哪些? 改成什么比较有意义? ,, 有含义的英文名有哪些? 带有寓意的 叫什么比较有意义 求很多有意思的各种类型的。 难懂又有深意的有哪些? 怎么起比较有意义 2020独特的id有哪些?