Comunidad de diseño web y desarrollo en internet online

Problema con imágenes guardadas como BLOB

Citar            
MensajeEscrito el 09 Sep 2013 11:43 pm
Hola a todos,
tengo un problema que me tiene loco y no se como solucionarlo. Este problema es que tengo una base de datos donde tengo una tabla para guardar ficheros mediante BLOB. Tengo hechos tanto la carga como la descarga de archivos y ninguno de los tipos de archivos que he probado (.doc, .pdf, .mp3, .txt, etc) me ha dado problemas, es decir, los cargo y los descargo de nuevo en el ordenador sin ningún problema.

El problema radica en que cualquier imagen (ya sea jpeg, gif o png), al descargarla, no me deja abrirla con ningún programa. Esto me tiene sin saber ya que hacer ya que no entiendo este problema justo para las imágenes.

El código para descargar los ficheros (todo lo hago dentro de un mismo fichero php) que estoy usando es el siguiente:

Código para seleccionar bd, hacer el select, etc:

Código PHP :

<?php
include('connection.php');
// Database connection
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$partesURL = explode('=', $url);
//$partesURL[1] is the name of the user 
$id = $partesURL[1];
//Para refrescar la página
echo '<meta http-equiv="refresh" content="0; url=downloadFile.php?id=' . $id . '" />';
$res = mysqli_query($con, "SELECT * FROM Files WHERE id='$id'");

while ($row = mysqli_fetch_array($res)) {
                   $ideaName = $row['ideaName'];
                    $solver = $row['solver'];
                    $name = $row['fileName'];
                    $type = $row['fileType'];
                    $size = $row['fileSize'];
                    $content = $row['fileContent'];
}
                
//Delete the first space
$ideaName2 = substr($ideaName, 1);
                


Código html que uso para incluir un botón para volver a la lista de descargas:

Código HTML :

<a data-role="button" data-theme="b" href="<?php echo "./proposalDetails.php?name=" . $ideaName2 . "&" . $solver; ?>" class="ui-btn-right">Back</a>


Código php para las cabeceras y realizar la descarga:

Código PHP :

 
header("Pragma: no-cache");
header("Expires: 0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: " . $type);
header("Content-Disposition: attachment; filename=" . $name . "");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $size);

echo $content; 


Si alguien pudiera decirme que estoy haciendo mal se lo agradecería ya que no se me ocurre que más hacer :S, gracias

Por napemi

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Sep 2013 12:39 pm
Te recomiendo que no guardes las imágenes en la BD, en cambio, guarda el nombre físico de la imagen para poder acceder a ella.

Saludos!

Por SinSemilla

Claber

336 de clabLevel



Genero:Masculino  

i am that i am...

firefox
Citar            
MensajeEscrito el 10 Sep 2013 02:40 pm
Tengo que hacerlo de esta manera :S además me parece extraño que solo me falle con las imágenes :(

Por napemi

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Sep 2013 03:31 pm
Abre el archivo descargado (cualquiera sea) con un editor de texto y mira si no hay algún mensaje de error de PHP o MySQL en alguna parte.

Como estás forzando al navegador a guardar la salida del servidor en un archivo, los mensajes de error podrían mezclarse con el archivo resultante rompiendo el formato original del archivo.

Además haces un echo de la variable $content y no se ve que ésta tenga algún valor.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 10 Sep 2013 05:16 pm
Lo he comprobado y no aparece ningún mensaje de error, simplemente los caracteres "raros" propios, pero no ví nada raro. Me siguen funcionando .txt, .pdf, .doc, etc. Tengo problemas con imágenes y he comprobado que con videos también.

La variable $content la recojo de la fila $row['fileContent']; que es la fila de la base de datos que corresponde al campo blob. La imprimo porque si no no me hace bien ninguna descarga.

Por napemi

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Sep 2013 05:20 pm
Creo que el problema lo tengo en que en el txt de la imagen, aparte de su contenido en caracteres "raros" se me incluye la cabecera y la parte html, si borro esta parte la imagen se muestra bien. Creo que la solución tendrá que ser que no incluya nada de html supongo, lo probaré y si lo soluciono lo comentaré por si alguien más presenta el mismo problema.

Gracias por vuestra ayuda.

Por napemi

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Sep 2013 05:35 pm
Finalmente sí, era eso... tenía un fichero php donde realizaba la creación de tablas y demás operaciones en la base de datos que no me dí cuenta que tenía el DOCTYPE y un par de cabeceras HTML y, al pasar por ese archivo php, esa cabecera se incluía en los archivos descargados y esa parte los hacía corruptos.

Al quitar esto ya parece que va bien, espero que esto pueda servirle a alguien en un futuro :)

Por napemi

8 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.