Autor Tema: Descargar archivo alojado en base de datos MySQL con PHP  (Leído 1877 veces)

Desconectado rubencinho

  • PHPerit@
  • *
  • Mensajes: 6
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Descargar archivo alojado en base de datos MySQL con PHP
« en: 13 de Mayo de 2014, 19:13:57 pm »
Hola amigos, llevo tres días intentando descargar un archivo que anteriormente guardé en una bases de datos con un formulario HTML (<input type="file">) pero no logro descargarlo en el navegador.

El código que uso para guardarlo en la BBDD es:
Código: [Seleccionar]
<?php
$con=mysql_connect("XXXXXX","XXXXXX","XXXXXX") or //Se establece la conexión con el servidor
die("No se puede establecer la conexión con el servidor");

$db=mysql_select_db("XXXXXX",$con); //Se selecciona la BBDD

//Diferenciar a qué bbdd va a ir el archivo en función del tipo
$tipodoc;
if($_POST[&#39;tipo&#39;]=="Informe / documento"){
$tipodoc="Informesydocumentos";
}
if($_POST[&#39;tipo&#39;]=="Acta / convocatoria"){
$tipodoc="Actasyconvocatorias";
}

$archivo=$_FILES["documento"]["tmp_name"]; 
$tamanio=$_FILES["documento"]["size"];
$tipo=$_FILES["documento"]["type"];
$nombre=$_FILES["documento"]["name"];

        if(
$archivo!="none"){
   
$fp=fopen($archivo,"rb");
   
$contenido=fread($fp,$tamanio);
   
$contenido=addslashes($contenido);
   
fclose($fp);
}
   

        
$sql="Insert into ".$tipodoc."(Fecha, CodigoCliente, Descripcion, PDF, Tipo) values(&#39;".$_POST[&#39;fecha&#39;]."&#39;, &#39;".$_POST[&#39;codigocliente&#39;]."&#39;, &#39;".$_POST[&#39;descripcion&#39;]."&#39;, &#39;".$contenido."&#39;, &#39;".$tipo."&#39;);";
$result=mysql_query($sql) or
die("Error de aplicación: Sentencia insert inválida");

print "El cliente ha sido creado correctamente.";
?>


Luego tengo un paso intermedio que me muestra toda la tabla para ver todos los archivos y descargar el que el cliente elija:

Código: [Seleccionar]
<?php
$con=mysql_connect("XXXXXX","XXXXXX","XXXXXX") or //Se establece la conexión con el servidor
die("No se puede establecer la conexión con el servidor");

$db=mysql_select_db("XXXXXX",$con); //Se selecciona la BBDD

$archivo="Select NumeroArchivo, Fecha, CodigoCliente, Descripcion from Informesydocumentos";
$resultado=mysql_query($archivo);

print "<table border=&#39;1&#39;><tr><td hidden=&#39;hidden&#39;>NumeroArchivo</td><td>Fecha</td><td>Descripción</td><td>Descargar</td></tr>";//Creación de la tabla e índices
while($fila=mysql_fetch_array($resultado)){
print "<tr><td>";
print $fila[&#39;Fecha&#39;];
print "</td><td>";
print $fila[&#39;Descripcion&#39;];
print "</td><td>";
print "<a href=&#39;DescargarArchivos.php?id=".$fila[&#39;NumeroArchivo&#39;]."&#39;><img src=&#39;unidad-de-disco-icono-3963-48.png&#39; width=&#39;48&#39; height=&#39;48&#39; /></a>";
print "</td></tr>";
}
print "</table>";
?>


Y por último tengo el que, se supone, que tiene que descargarlo:

Código: [Seleccionar]
<?php
$con=mysql_connect("XXXXXX","XXXXXX","XXXXXX") or //Se establece la conexión con el servidor
die("No se puede establecer la conexión con el servidor");

$db=mysql_select_db("XXXXXX",$con); //Se selecciona la BBDD

$archivo="Select Tipo, PDF from Informesydocumentos where NumeroArchivo=".$_GET[&#39;id&#39;].";";
$resultado=mysql_query($archivo);
$tipo=mysql_result($resultado0"Tipo");
$contenido=mysql_result($resultado0"PDF");

header("Content-type: $tipo");
print $contenido;
?>


Por más vueltas que le doy no encuentro nada que esté mal. He probado cambiar este último header("Content-type....) por application/pdf, ya que siempre son archivos .pdf, pero nada.

¿Algún alma caritativa sabe qué le puede pasar?

Un saludo y muchas gracias de antemano.

Comunidad PHPeros

Descargar archivo alojado en base de datos MySQL con PHP
« en: 13 de Mayo de 2014, 19:13:57 pm »

Desconectado maska

  • PHPer@ Fijo
  • ***
  • Mensajes: 126
  • Karma: 2
  • Nuev@ PHPer@
    • Ver Perfil
Re:Descargar archivo alojado en base de datos MySQL con PHP
« Respuesta #1 en: 15 de Mayo de 2014, 18:13:51 pm »
Acostúmbrate a guardar los archivos en el servidor y no en la base de datos. Te evitarás algunos problemas.
« Última modificación: 15 de Mayo de 2014, 18:16:20 pm por maska »

Desconectado rubencinho

  • PHPerit@
  • *
  • Mensajes: 6
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:Descargar archivo alojado en base de datos MySQL con PHP
« Respuesta #2 en: 19 de Mayo de 2014, 16:42:40 pm »
Muchas gracias por la respuesta Maska.

Mi intención es incorporarlo a un área de clientes, en la que le damos a cada cliente un código y acceden a todo lo relaccionado con su contrato, y en un par de secciones (informes/documentos y actas/convocatorias) puedan descargar documentos.

No conozco otra opción por la que usando sesiones (en este caso $_SESSION['user']) acceder a un archivo si no lo tengo en una base de datos.

¿Me lo puedes aclarar?

Un saludo y gracias de nuevo.

EDITO: todo perfecto guardando en el servidor. Al registrarse el usuario creo una carpeta con mkdir y luego alojo ahí los archivos, y para recuperarlos simplemente con un href hacia la ruta todo ok.

Me obcecaba en guardarlo en la base de datos y es mucho más fácil así.

Muchas gracias
« Última modificación: 28 de Mayo de 2014, 18:53:15 pm por rubencinho »