¿Cómo almacenar una imagen en MySQL (SQL)?
Un amigo me preguntaba por email, cómo podría guardar las imágenes de su página web dentro de su base de datos mysql.
Aquí os pongo un trozo de código que puede ayudaros para esta tarea:
- Empezamos por la tabla que contendrá las imágenes:
el campo "imagen" contendrá la imagen propiamente dicha (los datos binarios) y el campo "tipo" contendrá el tipo MIME que identifica el formato de la imagen (p. ej. image/gif).
Por supuesto esta tabla puede ser alterada, modificada, etc. para cubrir vuestras necesidades específicas.
El tipo de datos BLOB (BLOB, MEDIUMBLOB y LONGBLOB) es el usado por MySQL para almacenar datos binarios.
A continuación muestro un ejemplo de como almacenar una imagen en esta tabla que hemos creado:
Para recuperar la imagen de la base de datos, el proceso que
tendríamos que seguir depende de cual queramos que sea el
resultado. Imaginemos que lo único que queremos es recuperar
la imagen de la base de datos y mostrarla en el navegador:
Bueno, espero que este código os ayude y ya sabeis, si teneis alguna duda o problema para ponerlo en práctica, estaré encantado de echaros una mano.
Aquí os pongo un trozo de código que puede ayudaros para esta tarea:
- Empezamos por la tabla que contendrá las imágenes:
Código: |
CREATE TABLE imagenes ( id INT NOT NULL DEFAULT 0 auto_increment, imagen LONGBLOB, tipo VARCHAR(255), PRIMARY KEY (id) ); |
el campo "imagen" contendrá la imagen propiamente dicha (los datos binarios) y el campo "tipo" contendrá el tipo MIME que identifica el formato de la imagen (p. ej. image/gif).
Por supuesto esta tabla puede ser alterada, modificada, etc. para cubrir vuestras necesidades específicas.
El tipo de datos BLOB (BLOB, MEDIUMBLOB y LONGBLOB) es el usado por MySQL para almacenar datos binarios.
A continuación muestro un ejemplo de como almacenar una imagen en esta tabla que hemos creado:
Código: |
// Abro el archivo de imagen para cargar sus contenidos $archivo = 'images/foto01.jpg'; $fp = fopen ($archivo, 'r'); if ($fp){ $datos = fread ($fp, filesize ($archivo)); // cargo la imagen fclose($fp); // averiguo su tipo mime $tipo_mime = 'image/jpeg'; $isize = imagesize ($archivo); if ($isize) $tipo_mime = $isize['mime']; // La guardamos en la BD $datos = base64_encode ($datos); $sql = "INSERT INTO imagenes (imagen, tipo) VALUES ('$datos', '$tipo_mime'); $res = mysql_query($sql); if (!$res) echo "Error al ejecutar la consulta ($sql)\n"; } else echo "Error al abrir el archivo"; |
Para recuperar la imagen de la base de datos, el proceso que
tendríamos que seguir depende de cual queramos que sea el
resultado. Imaginemos que lo único que queremos es recuperar
la imagen de la base de datos y mostrarla en el navegador:
Código: |
$id = intval ($_GET['id']); // imaginamos que el parámetro "id" nos llega en la URL (p. ej. imagen.php?id=5). $sql = "SELECT imagen, tipo FROM imagenes WHERE id='$id'"; $res = mysql_query ($sql); if ( $res AND mysql_num_rows($res)>0 ){ // se ha encontrado la imagen $datos = mysql_fetch_array ($res); // Indicamos al navegador el tipo de imagen que le vamos a enviar header ('Content-type: ' . $datos['tipo']); // Enviamos los datos binarios (la imagen) echo base64_decode($datos['imagen']); } else echo "Error al ejecutar la consulta ($sql)\n"; |
Bueno, espero que este código os ayude y ya sabeis, si teneis alguna duda o problema para ponerlo en práctica, estaré encantado de echaros una mano.
1 Comentarios:
Hola Carmen,
efectivamente esto sirve para cualquier tipo de archivo binario (incluido los .swf).
Tan sólo cambia en el tipo mime del archivo.
En el caso de los swf, no puedes usar getimagesize, sino que directamente sabes que el tipo mime de los archivos swf es " application/x-shockwave-flash".
Al mostrarlo al navegador, cambiariamos la línea:
header ('Content-type: ' . $datos['tipo']);
por esta otra:
header ('Content-type: application/x-shockwave-flash');
por lo demás es todo igual.
No sé si es a lo que te referías.
Por
Manuel, a las 1:06 a. m.
Publicar un comentario
<< Inicio