Introducción En muchos casos, necesitamos guardar imágenes en la base de datos. En algunas aplicaciones, hay información confidencial que no se puede almacenar en el sistema de archivos, porque el usuario puede obtener fácilmente ilegalmente cualquier imagen almacenada en el sistema de archivos.
Este artículo discutirá cómo guardar imágenes en una base de datos de SQL SERVER en ASP.NET.
En este artículo aprenderemos sobre los siguientes aspectos:
l Requisitos para cargar archivos de imágenes
l Usando objetos Strem
l Obtener el tamaño y tipo de imagen cargada
l ¿Cómo utilizar el método InputStream?
Requisitos para cargar archivos de imagen Antes de comenzar a cargar, debemos hacer dos cosas importantes
El atributo enctype de la etiqueta #Form debe establecerse en el siguiente formulario:
enctype="multiparte/formulario-datos"
#Proporcione un control HTML que permita a los usuarios seleccionar archivos de imagen:
<tipo de entrada=archivo>
# También haga referencia al espacio de nombres System.IO para procesar objetos Strem. Los tres elementos anteriores deben aplicarse a las páginas aspx. También existen los siguientes requisitos en SQL SERVER:
#Una tabla con al menos un tipo de campo Imagen
#Además, sería mejor tener un campo de tipo Varchar usado para almacenar tipos de imágenes. Luego, tenemos una tabla de datos con un tipo de campo Imagen y un <tipo de entrada=archivo> (control de archivo HTML). También necesitamos un botón de envío en el que el usuario pueda hacer clic después de seleccionar la imagen. En el evento OnClick del botón necesitamos obtener el contenido del archivo de imagen y finalmente insertarlo en la tabla de datos. Echemos un vistazo al evento OnClick del botón, que lee la imagen y la inserta en la tabla de datos.
Botón Enviar código de evento OnClick
http://blog.downcodes.com/
Dim intImageSize como Int64
Dim strImageType como cadena
Dim ImageStream As Stream
' obtiene el tamaño de la imagen
intImageSize = PersonImage.PostedFile.ContentLength
' Obtiene el tipo de imagen
strImageType = PersonImage.PostedFile.ContentType
' Lee la imagen
ImageStream = PersonImage.PostedFile.InputStream
Dim ImageContent(intImageSize) como byte
Dim intStatus como entero
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
'Crear instancia de conexión y objeto de comando
Atenuar myConnection como nueva SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim myCommand As New SqlCommand("sp_person_isp", myConnection)
' Marca el comando como SPROC
myCommand.CommandType = CommandType.StoredProcedure
' Agregar parámetros a SPROC
Dim prmPersonImage como nuevo SqlParameter("@PersonImage", SqlDbType.Image)
prmPersonImage.Value = Contenido de imagen
myCommand.Parameters.Add(prmPersonImage)
Dim prmPersonImageType como nuevo SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)
prmPersonImageType.Value = strImageType
myCommand.Parameters.Add(prmPersonImageType)
Pruebe
miConexión.Open()
myCommand.ExecuteNonQuery()
miConexión.Cerrar()
Response.Write ("¡Nueva persona agregada exitosamente!")
Captura SQLexc como SqlException
Response.Write("Error al insertar. Los detalles del error son: " & SQLexc.ToString())
Finalizar intento
¿Cómo funciona?
El objeto PersonImage es el control HTMLInputFile. Primero necesitamos obtener el tamaño de la imagen insertada, lo cual se logra mediante el siguiente método:
intImageSize = PersonaImagen.PostedFile.ContentLength
A continuación, debe obtener el tipo de imagen a través de la propiedad ContentType. Lo último y más importante es obtener el flujo del archivo de imagen, lo cual se logra mediante los siguientes métodos:
ImageStream = PersonaImagen.PostedFile.InputStream
Tenemos una matriz de bytes ImageContent, que está lista para usarse para guardar el contenido de la imagen. La imagen completa se lee a través del método Read del objeto Stream. Este método tiene tres parámetros, a saber:
#La ubicación de destino del contenido de la imagen copiada
#Posición inicial de lectura
#La subsección que debe leerse se declara de la siguiente manera:
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
Ahora, leemos el contenido completo de la imagen. A continuación, debemos insertar el contenido de la imagen en la tabla de datos SQL. Usaremos un procedimiento almacenado para insertar el tipo de imagen y la imagen en la tabla de datos SQL. Si ha visto el código anterior, sabrá que configuramos el tipo de datos en SqlDbType.Image. De esta manera, guardamos con éxito la imagen en la base de datos de SQL SERVER.