2011-02-24 15 views
5

¿Es posible almacenar un archivo de imagen (.jpg, .gif, etc.) en la base de datos MYSQL? ¿O simplemente almacena en el sistema y toma la ruta de referencia de la imagen?imagen en la base de datos

Estoy usando ASP.NET C#, por lo que si tiene código de muestra, sería genial si pudiera compartirlo.

+3

Sí, puede almacenar datos binarios en una base de datos. Ten en cuenta que es una guerra santa si esos datos pertenecen o no. –

Respuesta

6

Sí, puede almacenar archivos de imagen (y cualquier otro archivo) en una base de datos como datos binarios.

En MySQL, el BLOB data type se puede usar para lograr esto.

Un BLOB es un objeto grande binario que puede contener una cantidad variable de datos. Los cuatro tipos de BLOB son TINYBLOB, BLOB, MEDIUMBLOB y LONGBLOB. Estos solo difieren en la longitud máxima de los valores que pueden contener. [...]

Los valores BLOB se tratan como cadenas binarias (cadenas de bytes). No tienen conjunto de caracteres, y la clasificación y la comparación se basan en los valores numéricos de los bytes en los valores de columna.

+0

Para obtener bytes de una imagen, use: byte [] b = File.ReadAllBytes (archivo); –

+0

Almacenar como blob, http://dev.mysql.com/doc/refman/5.0/en/blob.html. También puede guardar la imagen en el sistema de archivos y almacenar la página del archivo en su base de datos. – gnome

1

Debe crear una matriz de bytes de la imagen y almacenarla en la base de datos.

public static byte[] ConvertImageToByteArray(Image imageIn) 
{ 
    var ms = new MemoryStream(); 
    imageIn.Save(ms, ImageFormat.Png); 
    return ms.ToArray(); 
} 

Para convertir los datos de nuevo a una imagen:

public static Image ConvertByteArrayToImage(byte[] byteArrayIn) 
{ 
    var ms = new MemoryStream(byteArrayIn); 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 
1

4GuysFromRolla.com tiene un artículo sobre esto que he usado como referencia cuando estaba escribiendo código para almacenar datos binarios directamente en una base de datos: http://www.4guysfromrolla.com/articles/120606-1.aspx

Personalmente me parece mucho menos problemático almacenar la imagen en el sistema de archivos y un puntero en la base de datos.

+0

Vaya. No vi la parte de MySQL de la pregunta. No sé cuán útil será en realidad este artículo. – Dave

4

En primer lugar aquí un post que es bastante similar a éste: Should I store my images in the database or folders?

En segundo lugar una muestra para el almacenamiento de las imágenes en la base de datos: http://www.dotnetcurry.com/ShowArticle.aspx?ID=129&AspxAutoDetectCookieSupport=1

En mi opinión, depende de si decide almacenar imágenes en su base de datos o en carpetas. Ambos métodos tienen pros y contras.

Aquí un breve comentario de los foros de ASP.NET:

debe usted realmente almacenar las imágenes en la base de datos? Hace

unos diez años, empecé a uno de los primeros proyectos -un banco de datos de Internet imagen. Se suponía que debíamos entregar imágenes de varios tamaños y resolución a usuarios registrados. Cada imagen era diseñada como una colección de imágenes, desde la miniatura hasta la resolución más alta . La imagen más grande disponible tenía aproximadamente 4 MB. Cada imagen almacenada en el archivo ocupaba un total de 0 de 6 MB de espacio.

La base de datos back-end no se estaba ejecutando en una plataforma de Microsoft pero proporcionaba compatibilidad con para los campos BLOB.Sin mucho debate sobre , decidimos almacenar descripciones y otro catálogo información en la base de datos y almacenar imágenes como archivos individuales bajo una ruta conocida. También almacenamos en la base de datos información suficiente para el software para recuperar el archivo. Estar diseñados para un relativamente pequeño número de usuarios registrados, la aplicación nunca apareció escalabilidad problemas y en ningún momento nadie en equipo, o cualquier usuario, se quejan de rendimiento.

Puede esta breve experiencia, sobre todo una experiencia de una relativamente antigua edad de software y bases de datos tecnologías de usarse como un ejemplo de la superioridad de almacenamiento basado en archivos sobre el almacenamiento de base de datos? Ciertamente no, pero leyendo entre las líneas de cómo sistemas DBMS modernos implementan campos BLOB , he usado esta experiencia para formular una idea sobre almacenamiento de imágenes y bases de datos.

En resumen, ¿debería considerar almacenar imágenes en una base de datos? Si necesita editar las imágenes con frecuencia, sugiero almacenar las imágenes como archivos separados en el disco duro del servidor. Si el tamaño de las imágenes es muy grande (para ejemplo, cientos de megabytes), I sugiere almacenar las imágenes como archivos separados en el sistema de archivos. Si sus imágenes son esencialmente de solo lectura y relativamente estáticas, y si mide el tamaño en kilobytes, puede considerar almacenar sus imágenes en la base de datos .

+0

Entonces, dices que es posible hacer las dos cosas ... ¡¡Genial ... !! Gracias por esto ... – lock

0

Actualmente, mi empresa utiliza una base de datos con datos BLOB para documentos e imágenes, y estamos tratando de almacenar solo las referencias a los archivos en el servidor. El databse es muchos muchos GB, cuando debería ser de 20 MB. Recomendaría contra BLOB porque definitivamente ralentiza la base de datos.

+0

genial ...! Pero realmente tengo una duda sobre si las bases de datos pueden almacenar imágenes directamente o simplemente almacenar referencias ... Mi duda se borró. Gracias por tu respuesta – lock

Cuestiones relacionadas