Foros del Web » Programando para Internet » PHP »

Descargar archivos desde base de datos.

Estas en el tema de Descargar archivos desde base de datos. en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/10/2014, 12:32
 
Fecha de Ingreso: diciembre-2012
Mensajes: 23
Antigüedad: 11 años, 4 meses
Puntos: 0
Pregunta Descargar archivos desde base de datos.

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
Código HTML:
<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
Código PHP:
<?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.

Código PHP:
<?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.

Código PHP:
<? 
$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($res0"tipo"); 
$contenido mysql_result($res0"contenido"); 
$nombre mysql_result($res0"nombre"); 

 
header("Content-type: $tipo"); 
 echo 
$contenido;  
?>
Alguien me podría ayudar :(
  #2 (permalink)  
Antiguo 20/10/2014, 12:42
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Descargar archivos desde base de datos.

lee este articulo
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 21/10/2014, 10:29
 
Fecha de Ingreso: diciembre-2012
Mensajes: 23
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Descargar archivos desde base de datos.

Cita:
Iniciado por IsaBelM Ver Mensaje
[URL="http://www.cristalab.com/tutoriales/forzar-descargas-con-php-c166l/"]lee este articulo[/URL]
Hola aplique lo que decia ahí y me siguei mostrando la pagina descarga_archivo.php en blanco, hice estos cambios

En listar archivos en vez en enviar la id , ahora envio el tipo de archivo
Código PHP:
<?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?f=$fila[tipo]'>Descargar</a> 
<br> 
<br>"


?>
descarga_archivo.php
<?

Código PHP:
$f $_GET["f"];
    
header("Content-type: application/octet-stream");
    
header("Content-Disposition: attachment; filename=\"$f\"\n");
    
$fp=fopen("$f""r");
    
fpassthru($fp);
?> 
Está bien lo que hice?
  #4 (permalink)  
Antiguo 21/10/2014, 13:21
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Descargar archivos desde base de datos.

lee sobre el método fopen() y después continua leyendo el articulo que te dejé en mi post anterior para establecer algunas medidas de seguridad
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #5 (permalink)  
Antiguo 22/10/2014, 13:35
 
Fecha de Ingreso: diciembre-2012
Mensajes: 23
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Descargar archivos desde base de datos.

Cita:
Iniciado por IsaBelM Ver Mensaje
lee sobre el[URL="http://php.net/manual/es/function.fopen.php"] método fopen()[/URL] y después continua leyendo el articulo que te dejé en mi post anterior para establecer algunas medidas de seguridad
Hola gracias por la ayuda , logré que funcionara , dejo el codigo por si le sirve a alguien más. solo me faltaría aplicarle seguridad.

Código PHP:
<?php 
 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($res0"tipo");  
$contenido mysql_result($res0"contenido");  
$nombre mysql_result($res0"nombre");  

 
header("Content-type: $tipo");  
 
header("Content-Disposition: attachment; filename=".$nombre);
 echo 
$contenido
?>

Etiquetas: mysql, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:00.