Hola:
Utilizo el código encontrado en las faqs de el foro para generar miniaturas de un blob. El problema es que, tanto el ver.php, el listar_imagenes.php como el formulario funcionan perfecto pero, no puedo ver las miniaturas. Aqui todo el codigo (solo modifique los datos de la base de datos)
FORMULARIO.PHP
Código PHP:
<?php
if (isset($_GET['proceso'])){
echo $_GET['proceso']."<br>";
}
?>
<FORM enctype="multipart/form-data" method="post" action="insertar.php">
Archivo: <INPUT type="file" name="archivo" size="30">
<INPUT type="submit" name="submit" value="Subir archivo">
</FORM>
INSERTAR.PHP
Código PHP:
<?php
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre. Si no fue asi, te remite de nuevo al formulario de inserción:
// No se comprueba aqui si se ha subido correctamente.
if (empty($_FILES['archivo']['name'])){
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario ..
exit;
}
//establece una conexión con la base de datos.
$conexion = mysql_connect("localhost","nj_admin","123456") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("nj_principal",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.
// archivo temporal (ruta y nombre).
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;
// leer del archvio temporal .. el binario subido.
// "rb" para Windows .. Linux parece q con "r" sobra ...
$binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal)));
// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.
$binario_nombre=$_FILES['archivo']['name'];
$binario_peso=$_FILES['archivo']['size'];
$binario_tipo=$_FILES['archivo']['type'];
//insertamos los datos en la BD.
$consulta_insertar = "INSERT INTO archivos (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");
header("location: listar_imagenes.php"); // si ha ido todo bien
exit;
?>
LISTAR_IMAGENES.PHP
Código PHP:
<?php
mysql_connect("localhost","nj_admin","123456") or die ("no se ha podido conectar a la BD");
mysql_select_db("nj_principal") or die ("no se ha podido seleccionar la BD");
$sql = "SELECT id,archivo_nombre,archivo_tipo,archivo_peso FROM archivos";
$consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");
While ($registro=mysql_fetch_assoc($consulta)){
echo "<img src=\"ver.php?id=".$registro['id']."\">";
echo "<br> Nombre archivo: ".$registro['archivo_nombre'];
echo "<br> Tipo archivo (MIME formato): ".$registro['archivo_tipo'];
echo "<br> Peso: ".$registro['archivo_peso']." bytes.<br><br>";
}
?>
VER.PHP
Código PHP:
<?php
if(isset($_GET['id'])) {
// you may have to modify login information for your database server:
$conexion=mysql_connect("localhost","nj_admin","123456") or die ("no se ha podido conectar a la BD");
mysql_select_db("nj_principal") or die ("no se ha podido seleccionar la BD");
$sql = "SELECT archivo_binario,archivo_tipo FROM archivos WHERE id='".$_GET['id']."'";
$consulta = mysql_query($sql,$conexion);
$datos = mysql_result($consulta,0,"archivo_binario");
$tipo = mysql_result($consulta,0,"archivo_tipo");
header("Content-type: $tipo");
echo $datos;
}
?>
VER_THUMBNAIL.PHP
Código PHP:
<?php
// OJO, sólo funciona con imagnes en formato JPEG ...
if(isset($_GET['id'])) {
$conexion=mysql_connect("localhost","nj_admin","123456") or die ("no se ha podido conectar a la BD");
mysql_select_db("nj_principal") or die ("no se ha podido seleccionar la BD");
$sql = "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'";
$consulta = mysql_query($sql,$conexion);
$imagen = mysql_result($consulta,0,"archivo_binario");
// Envio cabeceras al navegador .. se indica que lo "que vá" es una imagen de formato MIME JPEG
Header ("Content-type: image/jpeg");
// Generar el thumbnail:
// Se crea la imagen desde el campo binario de la BD
$img = imagecreatefromstring($imagen);
// Tamaño del Thumbanil (de la imagen a generar ..)
$picsize = 125;
// Se obtienen los datos del ancho y alto de la imagen.
$new_w = imagesx($src_img);
$new_h = imagesy($src_img);
// Se calcula la relación alto/ancho
$aspect_ratio = $new_h / $new_w;
// Se ajusta al nuevo tamaño
$new_w = $picsize;
$new_h = abs($new_w * $aspect_ratio);
// Se crea la mascara de la imagen nueva
$dst_img = ImageCreateTrueColor($new_w,$new_h);
// Se copia y reajusta el nuevo tamaño en la nueva imagen.
imagecopyresampled($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img));
// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG
// El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen.
imagejpeg($dst_img,'',100);
}
?>
Y LOS QUE UTILIZO PARA MOSTRAR POR SEPARADO (CADA UNO EN SU CASO)
Código PHP:
<?php
echo "<img src=ver.php?id=1>";
?>
Código PHP:
<?php
echo "<img src=ver_thumbnail.php?id=1>";
?>
TODO FUNCIONA MENOS EL THUMBNAIL CUANDO QUIERO MOSTRARLO. SOLO SE VE LA EQUIS ROJA PEQUEÑA.
COMO DATO ADICIONAL, EN LA BASE DE DATOS, AL INSERTAR UNA IMAGEN, SE GUARDA COMO TIPO image/pjpeg Y NO COMO image/jpeg. PROBE CAMBIANDOLE EL CAMPO A UN REGISTRO YA ESTANDO ARRIBA A image/jpeg PERO YAMPOCO SE VE.
ESTARA ALLI LA FALLA, AL SUBIR EL ARCHIVO BLOB?
GRACIAS