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 , gracias