Maison >base de données >tutoriel mysql >Comment stocker et récupérer efficacement des images à partir d'un blob de base de données ?

Comment stocker et récupérer efficacement des images à partir d'un blob de base de données ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 18:28:02899parcourir

How to Effectively Store and Retrieve Images from a Database Blob?

Stocker l'image dans un blob de base de données et la récupérer pour l'afficher

Problème

Le stockage et la récupération d'images à partir d'une base de données sont une tâche courante en programmation. Bien que cela puisse paraître simple, des problèmes peuvent survenir si le code n'est pas implémenté correctement. Dans ce cas, un utilisateur a rencontré des problèmes lors de l'enregistrement d'images dans une base de données et de leur affichage dans un contrôle Picturebox.

Solution

Pour résoudre le problème, examinons le code de l'utilisateur et identifions les problèmes potentiels :

Enregistrement dans la base de données :

ImageStream = New System.IO.MemoryStream
PbPicture.Image.Save(ImageStream, System.Drawing.Imaging.ImageFormat.Jpeg)
ReDim rawdata(CInt(ImageStream.Length - 1))

Le code ne parvient pas à initialiser les données brutes avec les dimensions correctes. Pour stocker correctement les octets de l'image, ils doivent être redimensionnés pour correspondre à la longueur du flux d'images :

ReDim rawdata(CInt(ImageStream.Length))

Récupération de la base de données :

Dim ad As New System.IO.MemoryStream(100000)
Dim im As Image = Image.FromStream(ad) * "error occurs here" (see below)

L'erreur se produit parce que le flux de mémoire publicitaire n’est pas correctement positionné ou a une capacité insuffisante. Le code suivant résout ce problème :

ad.Position = 0
Dim im As Image = Image.FromStream(ad)

Code de travail pour enregistrer l'image dans la base de données

Dim filename As String = txtName.Text + ".jpg"
Dim FileSize As UInt32

conn.Close()

Dim mstream As New System.IO.MemoryStream()
PbPicture.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim arrImage() As Byte = mstream.GetBuffer()

FileSize = mstream.Length
Dim sqlcmd As New MySqlCommand
Dim sql As String
mstream.Close()

sql = "insert into [your table]  (picture, filename, filesize) 
                               VALUES(@File, @FileName, @FileSize)"

Try
    conn.Open()
    With sqlcmd
        .CommandText = sql
        .Connection = conn
        .Parameters.AddWithValue("@FileName", filename)
        .Parameters.AddWithValue("@FileSize", FileSize)
        .Parameters.AddWithValue("@File", arrImage)

        .ExecuteNonQuery()
    End With
Catch ex As Exception
    MsgBox(ex.Message)
Finally
    conn.Close()
End Try

Code de travail pour récupérer l'image de la base de données

Dim adapter As New MySqlDataAdapter
adapter.SelectCommand = Cmd

data = New DataTable

adapter = New MySqlDataAdapter("select picture from [yourtable]", conn)
commandbuild = New MySqlCommandBuilder(adapter)
adapter.Fill(data)

Dim lb() As Byte = data.Rows(0).Item("picture")
Dim lstr As New System.IO.MemoryStream(lb)
PbPicture.Image = Image.FromStream(lstr)
PbPicture.SizeMode = PictureBoxSizeMode.StretchImage
lstr.Close()

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