Heim > Datenbank > MySQL-Tutorial > Hauptteil

So speichern und lesen Sie Bilder in MySQL

藏色散人
Freigeben: 2020-11-03 10:07:23
Original
3206 Leute haben es durchsucht

MySQL-Speichermethode zum Lesen von Bildern: Konvertieren Sie zuerst das Bild in einen Pufferstrom. Rufen Sie dann das Byte-Array des Bildes ab und führen Sie schließlich die zugehörigen Vorgänge aus, indem Sie „public void MapSearchQuery(out byte[] imageByteResulet){...}“ lesen. „Mach einfach das Foto.

So speichern und lesen Sie Bilder in MySQL

Empfohlen: „MySQL-Video-Tutorial

Zunächst stellen wir die Datentypen im Zusammenhang mit MySQL vor: Es gibt vier BLOB-Typen in MySQL: TinyBlob (maximal 255 Byte), Blob (maximal 65 KB) , MediunBlob (16M), LongBlob (maximal 4G). Bitte beachten Sie hier, dass, wenn die verwandten Wörter Daten zu lang... in Ihrer Datenbank erscheinen, es sein kann, dass die Größe des von Ihnen ausgewählten Typs nicht ausreicht.

Lassen Sie mich als Nächstes kurz darüber sprechen, warum ich nicht die Methode zum Speichern des Bildpfads verwendet habe, sondern die Methode zum Speichern des Bildes direkt in MySQL übernommen habe. Dafür gibt es zwei Gründe:

1. Es ist keine große Anzahl von Bildern erforderlich, eine Datenbank benötigt nur ein Bild

2. Die Softwarestruktur besteht darin, einen Hauptclient zu verwenden, um über WebService auf mehrere verbundene Clients unten zuzugreifen Wenn der untergeordnete Client Bilder nicht direkt speichert, damit der Hauptclient darauf zugreifen kann, benötigt der Hauptclient zwangsläufig eine Funktion zum Laden von Bildern (ähnlich der FTP-Funktion).

Gehen wir direkt zum 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;
             }
         }
Nach dem Login kopieren

Dies ist der Operationscode zum Einfügen des Bildes in die Datenbank. Der Pfad ist der Pfad, in dem sich das Bild befindet, das Sie speichern müssen (einschließlich des Namens und des Suffixes). (das Bild). Außerdem verwende ich hier die ADO.NET-Verbindungsmethode und die Sprache ist C#. Ich muss die anderen Codes nicht erklären ...

Das Folgende ist der Code zum Einlesen von Bildern 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();
         }
Nach dem Login kopieren

Hier achte ich natürlich darauf, dass das Image-Objekt nicht über WebService übertragen werden kann und wandle die BLOB-Daten zur Übertragung nur in Byte[] um. Wenn Sie diese Funktion nicht benötigen, können Sie sie direkt rausschmeißen Der entsprechende Code und das Konvertieren des Byte[] in ein Bildobjekt reichen aus, und es werden zwei Methoden gleichzeitig bereitgestellt. Die erste: imageByte sind die Byte[]-Daten, die durch Aufrufen der obigen Funktion erhalten werden

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

Auf diese Weise wird das Bild gelesen und angezeigt Raum

Bitmap bm = new Bitmap(new MemoryStream(
imageByte
));
            
    
 pictureBox1.Image = bm;
Nach dem Login kopieren
Nun, ich bin hier fertig, natürlich ist es nicht erzwungen. Anstatt das Bild in der Datenbank zu speichern, können Sie eine URL-Zuordnung erstellen und den Dateistream zurückgeben (das habe ich noch nicht ausprobiert. Ich werde meine Erfahrungen teilen mit allen, nachdem ich Zeit hatte, es auszuprobieren).

Das obige ist der detaillierte Inhalt vonSo speichern und lesen Sie Bilder in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage