Maison  >  Article  >  base de données  >  Comment stocker et lire des images dans MySQL

Comment stocker et lire des images dans MySQL

藏色散人
藏色散人original
2020-11-03 10:07:233212parcourir

Méthode de stockage MySQL pour lire les images : convertissez d'abord l'image en flux tampon ; puis obtenez le tableau d'octets de l'image et effectuez les opérations associées ; enfin, transmettez "public void MapSearchQuery(out byte[] imageByteResulet){. . .}" il suffit de lire l'image.

Comment stocker et lire des images dans MySQL

Recommandé : "Tutoriel vidéo MySQL"

Tout d'abord, présentons les données liées à MySQL tapez : Il existe quatre types de BLOB dans MySQL, TinyBlob (maximum 255 octets), Blob (maximum 65 Ko), MediunBlob (16 M), LongBlob (maximum 4G). Veuillez noter ici que si les mots associés Données trop longues... apparaissent dans votre base de données, il se peut que la taille du type que vous avez sélectionné ne soit pas suffisante.

Ensuite, permettez-moi d'expliquer brièvement pourquoi je n'ai pas utilisé la méthode de stockage du chemin de l'image, mais j'ai adopté la méthode de stockage de l'image directement dans MySQL. Il y a deux raisons :

1. Elle ne nécessite pas un grand nombre d'images, une base de données n'a besoin que d'une seule image

2. Le La structure du logiciel est via WebService, un client principal accède à plusieurs clients affiliés ci-dessous. Si le client affilié ne stocke pas d'images pour un accès direct par le client principal, alors le client principal aura inévitablement besoin d'une fonction pour charger les images (similaire à la fonction FTP). ).

Passons directement au code :

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;
             }
         }

C'est le code d'opération pour insérer l'image dans la base de données. Le chemin est le stockage. dont vous avez besoin. Le chemin où se trouve l'image (y compris le nom et le suffixe de l'image). De plus, j'utilise la méthode de connexion ADO.NET et le langage est C#. Je n'ai pas besoin d'expliquer d'autres codes...

Ce qui suit est le code pour lire l'image dans 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();
         }

Bien sûr, ici je veillez à ce que l'objet Image ne puisse pas. Grâce à la transmission WebService, les données BLOB sont uniquement converties en octet[] pour la transmission. Si vous n'avez pas besoin de cette fonction, vous pouvez directement extraire le code correspondant et convertir l'octet[] en un objet image. . Deux méthodes sont fournies ci-dessous

Premier type : imageByte est la donnée de byte[] obtenue en appelant la fonction ci-dessus .

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

De cette façon, l'image est lue et affichée

Deuxième type : BitMap est

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

dans l'espace de noms System.Drawingm. Eh bien, j'ai terminé ici. Bien sûr, vous n'avez pas besoin de sauvegarder l'image dans la base de données. Vous pouvez créer un mappage d'URL et renvoyer le flux de fichiers (je n'ai pas encore essayé). . Je partagerai mon expérience avec tout le monde dès que j'en aurai le temps).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn