Foros del Web » Programando para Internet » PHP »

Descargar un archivo en Base de Datos

Estas en el tema de Descargar un archivo en Base de Datos en el foro de PHP en Foros del Web. Hey.... tengo en mi base de datos archivos .DOC y .PDF (En binario) como puedo hacer para que los usuarios puedan descargarlos, hasta el momento ...
  #1 (permalink)  
Antiguo 12/09/2006, 12:20
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Descargar un archivo en Base de Datos

Hey....

tengo en mi base de datos archivos .DOC y .PDF(En binario) como puedo hacer para que los usuarios puedan descargarlos, hasta el momento tengo esto:

Código PHP:
 if(isset($_GET['id'])) {

    include 
"../admin/util/conecta.php";
    include 
"../admin/util/validaciones.php";

    if(
validaID($_GET['id'])){
    
        
$sql "SELECT imagen,imagen_type,imagen_peso FROM casos WHERE id_caso='".$_GET['id']."'";
        
$rs mysql_query($sql,$conn);

        
$file mysql_result($rs,0,"imagen");
        
$type mysql_result($rs,0,"imagen_type");
        
$peso mysql_result($rs,0,"imagen_peso");
     
        
header('Content-type: $type');
        
header('Content-Transfer-Encoding: Binary');
        
header('Content-length: '.$peso);
        
header('Content-disposition: attachment'); 
        echo 
$file;
    }
 } 
con esto si baja un archivo, pero este es de texto y solo contiene signos extranios en su contenido....

alguien podria orientarme como hacer para sacar el DOC o PDF de la base de datos y entregarselo al navegador??

thanks!

have funnnnnnn
  #2 (permalink)  
Antiguo 12/09/2006, 13:02
 
Fecha de Ingreso: diciembre-2004
Mensajes: 36
Antigüedad: 19 años, 3 meses
Puntos: 1
Hola Stock:

No soy un experto en PHP pero me defiendo, la forma como haces la descarga esta bien, el problema esta en la consulta y el include. Trata de no utilizar el include() cuando utilizes header() para esto puedes utilizar require(); puesto que solo descarga codigo basura.

Yo tuve el mismo problema con un sistema de descargas que desarrollé. El problema era en los includes y trata de utilizar este tipo de conexion:

<?php

$hostname_cnRelInter2 = "localhost";
$database_cnRelInter2 = "bdnombre";
$username_cnRelInter2 = "root";
$password_cnRelInter2 = "";

$cnRelInter2 = mysql_pconnect($hostname_cnRelInter2, $username_cnRelInter2, $password_cnRelInter2) or trigger_error(mysql_error(),E_USER_ERROR);
?>

Espero haber respondido tu duda. Cualquier consulta puedes responder en este foro, voy a estar atento.
  #3 (permalink)  
Antiguo 12/09/2006, 13:18
 
Fecha de Ingreso: agosto-2006
Mensajes: 121
Antigüedad: 17 años, 8 meses
Puntos: 0
Al menos hay un error en:

Código PHP:
header('Content-type: $type'); 
Pasa que usas comillas simples y dentro pones una variable que se no se va a parsear y se va a dejar tal cual, esto es el texo $type. Usa comillas dobles así:

Código PHP:
header("Content-type: $type"); 
Y ahora sí le dices al navegador cuál es el tipo correcto del archivo (asumo que está bien grabado en la BD), y sabrá cómo manipularlo.

En cuanto a los includes, si estos no generan salida alguna al cuerpo del protocolo HTTP, no debería haber ningún problema para mandar las cabeceras (el requisito es mandar primero las cabeceras y luego el cuerpo).

Saludos.
  #4 (permalink)  
Antiguo 13/09/2006, 08:44
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Gracias, en efecto, esto era lo que estaba mal

header('Content-type: $type');

lo he cambiado y me ha funcionado, peroooooo solo para los .doc, estos los descarga correctamente y los peudo visualizar en word perfectamente, peroooo para los PDF sigo teniendo el mismo problema de los simbolos raros, la cabecera para los pdf seria algo asi:

header('Content-type: application/pdf');

y como les cuento, me sigue poniendo cosas raras.....

otra cosa, el archivo que se descarga me lo pone con el nombre de download.php, pues ese es el nombre del archivo que contiene el script de descarga, alguien sabe como asignarle otro nombre? pues me gustaria poder asignarle el nombre del producto que tengo en mi Base de datos...

thanks guys!!
  #5 (permalink)  
Antiguo 13/09/2006, 08:53
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
ahhhhhhhh

en realidad si me baja bien los PDF, solo que como se llama download.php, me los abre con el notepad, pero si le cambio la extencion a download.pdf, ahora si me los visualiza muy bien

soooooo.... alguien sabe como cambiarle el nombre y la extencion a los archivos enviados al navegador??

thanks
  #6 (permalink)  
Antiguo 13/09/2006, 09:01
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Yeah!! ya lo tengo

aqui les pongo el script completo

Código PHP:
<?

 
if(isset($_GET['id'])) {
    include 
"../admin/util/conecta.php";
    include 
"../admin/util/validaciones.php";

    if(
validaID($_GET['id'])){
        
$extenciones = array("application/msword"=>"doc","application/pdf"=>"pdf","image/jpeg"=>"jpg");
        
        
$sql "SELECT cliente,imagen,imagen_type,imagen_peso FROM casos WHERE id_caso='".$_GET['id']."'";
        
$rs mysql_query($sql,$conn);

        
$file mysql_result($rs,0,"imagen");
        
$type mysql_result($rs,0,"imagen_type");
        
$peso mysql_result($rs,0,"imagen_peso");
        
$nombre mysql_result($rs,0,"cliente");
     
        
header('Content-type: '.$type);
        
header('Content-Transfer-Encoding: Binary');
        
header('Content-length: '.$peso);
        
header('Content-disposition: attachment; filename="'.$nombre.'.'.$extenciones[$type].'"'); 
        echo 
$file;
    }
 }
 
?>
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 19:22.