PHP - Descargar archivos desde base de datos

 
Vista:
sin imagen de perfil

Descargar archivos desde base de datos

Publicado por luis (7 intervenciones) el 21/10/2014 21:41:48
Hola tengo una aplicación en php para subir archivos y luego descargarlos. Me funciona todo bien menos la descarga , les enseño el código por partes.

*Form


1
2
3
4
5
<form enctype="multipart/form-data" action="guardar_archivo.php" method="post">
Descripción <input type="text" name="titulo" size="30">
Ubicación <input type="file" name="archivito">
<input type="submit" value="Enviar archivo">
</form>

*guardar_archivo.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
 
$conn = mysql_connect("localhost","root","");
mysql_select_db("upload");
 
 $archivo = $_FILES["archivito"]["tmp_name"];
 $tamanio = $_FILES["archivito"]["size"];
 $tipo    = $_FILES["archivito"]["type"];
 $nombre  = $_FILES["archivito"]["name"];
 $titulo  = $_POST["titulo"];
 if ( $archivo != "none" )
 {
    $fp = fopen($archivo, "rb");
    $contenido = fread($fp, $tamanio);
    $contenido = addslashes($contenido);
    fclose($fp);
 
    $qry = "INSERT INTO archivos VALUES (0,'$nombre','$titulo','$contenido','$tipo')";
    mysql_query($qry);
 
    if(mysql_affected_rows($conn) > 0)
       print "Se ha guardado el archivo en la base de datos.";
    else
       print "NO se ha podido guardar el archivo en la base de datos.";
 }
 else
    print "No se ha podido subir el archivo al servidor";
 ?>

*Luego listar_archivos.php , donde muestra los archivos que hay en la DB y un link para descargarlos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$conn = mysql_connect("localhost","root","");
mysql_select_db("upload");
 
$qry = "SELECT id, nombre, titulo, tipo FROM archivos";
 
$res = mysql_query($qry);
 
 
while($fila = mysql_fetch_array($res))
{
print "$fila[titulo]
<br>  
$fila[nombre] ($fila[tipo])  
<br>  
<a href='descarga_archivo.php?id=$fila[id]'>Descargar</a>  
<br>  
<br>";
}
?>

*y por ultimo descarga_archivo.php , el cual no me funciona. Al darle click a Descargar me envia a descarga_archivo.php con la página en blanco y no se descarga nada.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$conn = mysql_connect("localhost","root","");
mysql_select_db("upload");
 
$id = $_GET['id'];
$qry = "SELECT tipo, contenido, nombre FROM archivos WHERE id=$id";
$res = mysql_query($qry);
$tipo = mysql_result($res, 0, "tipo");
$contenido = mysql_result($res, 0, "contenido");
$nombre = mysql_result($res, 0, "nombre");
 
 header("Content-type: $tipo");
 echo $contenido;
?>

Alguien me podría ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Descargar archivos desde base de datos

Publicado por xve (6935 intervenciones) el 22/10/2014 08:05:43
Hola Luis, creo que te falta indicar que es un archivo, y el nombre del mismo...

Después del Content-type, pon esto antes de enviar el contenido del archivo:
1
header("Content-Disposition: attachment; filename=".$nombre);

Creo que con esto te tiene que funcionar...

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Descargar archivos desde base de datos

Publicado por luis (7 intervenciones) el 22/10/2014 16:16:10
Hola, gracias por darte el tiempo de ayudarme . Mira hice los cambios que me dijiste pero me sigue mostrando en blanco la página y no descarga.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
$conn = mysql_connect("localhost","root","");
mysql_select_db("upload");
 
 
$id = $_GET['id'];
$qry = "SELECT tipo, contenido, nombre FROM archivos WHERE id=$id";
$res = mysql_query($qry);
$tipo = mysql_result($res, 0, "tipo");
$contenido = mysql_result($res, 0, "contenido");
$nombre = mysql_result($res, 0, "nombre");
 
 header("Content-type: $tipo");
 header("Content-Disposition: attachment; filename=".$nombre);
 echo $contenido;
?>

Está es la BD, por si sirve de algo.
i5qah0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Descargar archivos desde base de datos

Publicado por xve (6935 intervenciones) el 22/10/2014 20:13:52
Hola Luis, parece que todo esta bien...

Si le comentas los dos headers(...) te muestra en la pantalla los bits del archivo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Descargar archivos desde base de datos

Publicado por luis (7 intervenciones) el 22/10/2014 21:14:23
comente los headers y no muestra nada , cual podria ser el problema?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Descargar archivos desde base de datos

Publicado por luis (7 intervenciones) el 22/10/2014 21:32:07
Amigo lo resolví, estaba bien el codigo final , solo cree un archivo descarga_archivo.php nuevo y funcionó.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Descargar archivos desde base de datos

Publicado por xve (6935 intervenciones) el 23/10/2014 07:45:21
Hola Luis, que extraño... de todas maneras, me alegro que se solucionara!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Descargar archivos desde base de datos

Publicado por julio (1 intervención) el 05/01/2021 23:55:25
hola como puedo hacer esto mismo pero usando mysqli
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Descargar archivos desde base de datos

Publicado por Jose Aquino (1 intervención) el 08/02/2018 19:49:07
Hola, trate de hacer algo similar pero con un archivo PDF y todo va bien hasta el momento de querer abri el archivo, me sale "Adobe Reader no pudo abrir 'MiArchivo.pdf' debido a que no es un tipo de archivo admitido o está dañado (por ejemplo, se envió como adjunto de correo electrónico y no se descodificó correctamente) "
Al momento de comentar los header si me muestra los bits del archivo. ¿alguna ayuda o sugerencia? :(
Adjunto la imagen del código



imagenPDF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar