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
Libérer: 2024-11-16 18:28:02
original
879 Les gens l'ont consulté

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))
Copier après la connexion

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))
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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()
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal