Foros del Web » Programando para Internet » PHP »

Guardar ruta de archivo y descargarlo de bd

Estas en el tema de Guardar ruta de archivo y descargarlo de bd en el foro de PHP en Foros del Web. Hola!! Espero puedan ayudarme, estoy iniciando en esto de programar en php y sinceramente no se que mas puedo hacer... Resulta que tengo que subir ...
  #1 (permalink)  
Antiguo 20/11/2012, 13:02
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Guardar ruta de archivo y descargarlo de bd

Hola!!

Espero puedan ayudarme, estoy iniciando en esto de programar en php y sinceramente no se que mas puedo hacer...

Resulta que tengo que subir un archivo a mi bd y guardar la ruta para poder descargarlo, lo estoy haciendo de manera local, uso xampp.. mi bd tiene los siguientes campos:

-id
-name
-description
-ruta
-tipo
-size

El código que utilizo para guardar los archivos es el siguiente:

Código PHP:
<?php  
 
if (isset($_POST['submit'])) {  
    if(
is_uploaded_file($_FILES['fichero']['tmp_name'])) {
     
        
$ruta_destino "C:/xampp/htdocs/documentos/";
        
$namefinaltrim ($_FILES['fichero']['name']); 
        
$namefinalereg_replace (" """$namefinal);
        
$uploadfile$ruta_destino $namefinal;  
 
        if(
move_uploaded_file($_FILES['fichero']['tmp_name'], $uploadfile)) { // se coloca en su lugar final  
                   
                    
echo "<b>Upload exitoso!. Datos:</b><br>";  
                    echo 
"Nombre: <i><a href=\"".$ruta_destino $_FILES['fichero']['name']."\">".$_FILES['fichero']['name']."</a></i><br>";  
                    echo 
"Tipo MIME: <i>".$_FILES['fichero']['type']."</i><br>";  
                    echo 
"Peso: <i>".$_FILES['fichero']['size']." bytes</i><br>";  
                    echo 
"<br><hr><br>";  
                         
//conectamos a la base de datos 
 
                 
mysql_connect('localhost','root')or die ('Ha fallado la conexión: '.mysql_error());
                 
mysql_select_db('directorio')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
 
                   
$nombre_archivo  $_POST["nombre_archivo"];
                   
$description  $_POST["description"];
  
                   
$query "INSERT INTO archivos  
   VALUES (0,'$nombre_archivo','$description' , '"
.$_FILES['fichero']['name']."','".$_FILES['fichero']['type']."', '".$_FILES['fichero']         ['size']."')";
 
       
mysql_query($query) or die(mysql_error());
       echo 
"El archivo '".$nombre_archivo."' ha sido registrado de manera satisfactoria.<br />";
                                   
        }  
    }  
 }
          
// A continuación el formulario  
?>
Código HTML:
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">  
    Archivo: <input name="fichero" type="file" size="150" maxlength="150">  
    <br> Nombre: <input name="nombre_archivo" type="text" size="70" maxlength="70">
    <br> Descripcion: <input name="description" type="text" size="100" maxlength="250">
    <br>
  <input name="submit" type="submit" value="Upload!">  
</form> 
Eso si me funciona.. sólo que en la bd se guarda en "ruta" el nombre del archivo con la extensión: prueba.docx, despues listo los resultados para descargarlos con este código:

Código PHP:
<?php    
    
//listar_archivos.php
             
    
$conexion mysql_connect('localhost','root')or die ('Ha fallado la conexión: '.mysql_error());
    
mysql_select_db('directorio')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
     
               
$_pagi_sql "SELECT   id, name, description, ruta, tipo, size FROM archivos";  
               
$_pagi_result mysql_query($_pagi_sql $conexion) or die ( mysql_error() );  
     
        while(
$row mysql_fetch_array($_pagi_result)){
     
    echo 
"<table width=70%><tr bgcolor= #61e877><div align=center>";
     
                       echo 
"<b>Titulo: </b>";
                       echo 
$row['name'];
                 echo 
"</div></tr>";
                 echo
"<tr>&nbsp;</tr>";
                 echo 
"<tr bgcolor= #cccccc><b> &nbsp;&nbsp;&nbsp;Descripcion: </b><br>";
     
                       echo 
$row['description'];
                   
                  echo 
"</tr>";
     
                echo
"<tr bgcolor= #cccccc >&nbsp;</tr>";
                echo 
"<tr bgcolor= #cccccc><b> &nbsp;&nbsp;&nbsp;Tamaño: </b>";
                  echo 
$row['size']." Bytes";
     
                 echo 
"</tr>";
    
              echo
"<tr bgcolor= #cccccc>&nbsp;</tr>";
               echo 
"<tr bgcolor= #cccccc><div align=center><a href=\"descargar.php?ruta=archivos/$row[ruta]\">Descargar</a></div>";  
              echo 
"</tr>";
              echo
"<tr bgcolor= #cccccc>&nbsp;</tr>";
     
    echo 
"</table>" ;
     
        }    
    
?>
y al darle descargar me sale esto:

¡Objeto no encontrado!

El enlace requerido no ha sido localizado en este servidor. El enlace en la página referente parece tener algun error o ha expirado. Por favor comunique al autor de la página el error.

Por favor contacte con el webmaster en caso de que usted crea que existe un error en el servidor.
Error 404
localhost
11/20/12 12:58:11
Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8e mod_autoindex_color PHP/5.2.2

el código para descargar es este:

Código PHP:
<?php 
    header
("Content-Disposition: attachment; filename=ruta_al_archivo");
    
$ruta $_GET['ruta'];
    
$archivo_arr explode"/"$ruta );
    
$archivo $archivo_arr[count($archivo_arr) - 1];
     
    if( !
file_exists$ruta ) ) {
             die( 
"No existe $ruta" );
    }
     
    
header"Content-Disposition: attachment; filename=".$archivo."");
    
header"Content-type: application/octet-stream" );  
    
header("Content-Length: ".filesize($ruta)); //header que envia al navegador el tamaño del archivo.
     
    
@readfile$ruta );  
    
?>
Por favor ayudenme ya estoy desesperada
  #2 (permalink)  
Antiguo 20/11/2012, 13:13
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Guardar ruta de archivo y descargarlo de bd

Yo creo que cuando guardas la ruta esta malo:

Código Javascript:
Ver original
  1. $ruta_destino = "C:/xampp/htdocs/documentos/";

por que no pruebas quitando el C:/xampp/htdocs/

Código Javascript:
Ver original
  1. $ruta_destino = "../documentos/";
ó
Código Javascript:
Ver original
  1. $ruta_destino = "documentos/";

Creo que lo que tienes es muy parecido a esta pagina, revisa la bien que creo que ocmo guardas la ruta no es de esa forma: Subir archivos al server, guardar ruta en la BBDD y descargarlos.
  #3 (permalink)  
Antiguo 20/11/2012, 13:41
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

Hola DeivisAndres! gracias por responder.. ya mismo lo pruebo :)
  #4 (permalink)  
Antiguo 20/11/2012, 13:44
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

Cita:
Iniciado por DeivisAndres Ver Mensaje
Yo creo que cuando guardas la ruta esta malo:

Código Javascript:
Ver original
  1. $ruta_destino = "C:/xampp/htdocs/documentos/";

por que no pruebas quitando el C:/xampp/htdocs/

Código Javascript:
Ver original
  1. $ruta_destino = "../documentos/";
ó
Código Javascript:
Ver original
  1. $ruta_destino = "documentos/";

Creo que lo que tienes es muy parecido a esta pagina, revisa la bien que creo que ocmo guardas la ruta no es de esa forma: [URL="http://www.gs-zone.org/subir_archivos_al_server_guardar_ruta_en_la_bbdd_y _descargarlos_tav1.html"][B]Subir archivos al server, guardar ruta en la BBDD y descargarlos.[/B][/URL]


Me funcionó a la perfección!! mil gracias por tu tiempo!!
  #5 (permalink)  
Antiguo 20/11/2012, 13:56
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

OOhh nooo sorry.. pensé que ya había funcionado y bueno en parte si porque al darle click en el archivo que se guardó, lo descarga perfecto! peeeero cuando lo intento descargar en listar_archivos.php no lo hace.. será que algo tengo mal en el código de descarga??
  #6 (permalink)  
Antiguo 20/11/2012, 14:07
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Guardar ruta de archivo y descargarlo de bd

Como no te comprendo te descargar pero a la vez no, explícate un poquito mejor que no te entiendo ?
  #7 (permalink)  
Antiguo 20/11/2012, 14:16
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

Ok.. mira lo que pasa es que cuando guardo un archivo me aparece esto:

Upload exitoso!. Datos:
Nombre: prueba.docx
Tipo MIME: application/vnd.openxmlformats-officedocument.wordprocessingml.document
Peso: 12639 bytes

y si le doy click en prueba.docx lo descarga bien pero lo que intento hacer es que me aparezca un listado con los archivos que tengo guardados..ya logré que me salga el listado pero al darle click en el link descargar no me lo descarga.

El link descargar lleva este código:

Código PHP:
Ver original
  1. <?php
  2.     $ruta = $_GET['ruta'];
  3.     $archivo_arr = explode( "/", $ruta );
  4.     $archivo = $archivo_arr[count($archivo_arr) - 1];
  5.      
  6.     if( !file_exists( $ruta ) ) {
  7.              die( "No existe $ruta" );
  8.     }
  9.      
  10.     header( "Content-Disposition: attachment; filename=".$archivo."");
  11.     header( "Content-type: application/octet-stream" );  
  12.     header("Content-Length: ".filesize($ruta)); //header que envia al navegador el tamaño del archivo.
  13.      
  14.     @readfile( $ruta );  
  15.     ?>

Disculpa si doy muchas molestias..Gracias
  #8 (permalink)  
Antiguo 20/11/2012, 14:33
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Guardar ruta de archivo y descargarlo de bd

mmmm ya, que tipo de mensaje te sale cuando intentas descargarlo desde la lista?
  #9 (permalink)  
Antiguo 20/11/2012, 14:59
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

Me sale esto:

No existe archivos/prueba.docx

pero no encuentro el error
  #10 (permalink)  
Antiguo 20/11/2012, 15:06
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 2 meses
Puntos: 137
Respuesta: Guardar ruta de archivo y descargarlo de bd

yo lo acabo de probar en mi PC y me funciona bien, pero deja te explico algo, el archivo debe estar en el mismo directorio que este archivo de php, es decir yo tengo la siguiente estructura
descarga.php
otroarchivo.php

si entro a descarga.php?ruta=otroarchivo.php me lo descarga bien,

Pero si tengo lo siguiente
descarga.php
/descargas/otroarchivo.php

y entro a si entro a descarga.php?ruta=otroarchivo.php pues no existe el archivo, asi que debes asegurar que las rutas esten bien

Saludos
  #11 (permalink)  
Antiguo 20/11/2012, 15:21
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

Hola abimex!

No se si entendí mal..

En descarga.php debo de tener esto?

Código PHP:
echo"<tr bgcolor= #cccccc>&nbsp;</tr>";
               echo 
"<tr bgcolor= #cccccc><div align=center><a href=\"descarga.php?ruta=archivos/$row[ruta]\">Descargar</a></div>";  
              echo 
"</tr>";
              echo
"<tr bgcolor= #cccccc>&nbsp;</tr>"

y en otroarchivo.php esto?

Código PHP:
<?php 
    $ruta 
$_GET['ruta'];
    
$archivo_arr explode"/"$ruta );
    
$archivo $archivo_arr[count($archivo_arr) - 1];
     
    if( !
file_exists$ruta ) ) {
             die( 
"No existe $ruta" );
    }
     
    
header"Content-Disposition: attachment; filename=".$archivo."");
    
header"Content-type: application/octet-stream" );  
    
header("Content-Length: ".filesize($ruta)); //header que envia al navegador el tamaño del archivo.
     
    
@readfile$ruta );  
    
?>
  #12 (permalink)  
Antiguo 20/11/2012, 15:30
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 2 meses
Puntos: 137
Respuesta: Guardar ruta de archivo y descargarlo de bd

nonoon mira es algo super inseguro que especifiques el pah desde el GET, alguien puede entrar a descarga.php?ruta=index.php y descargara el index, te recomiendo que hagas esto
Código PHP:
Ver original
  1. <?php  
  2.     $ruta = "archivos/".$_GET['ruta']; // aqui especifica la carpeta a la que podran
  3.     $archivo_arr = explode( "/", $ruta );
  4.     $archivo = $archivo_arr[count($archivo_arr) - 1];
  5.     if( !file_exists( $ruta ) ) {
  6.              die( "No existe $ruta" );
  7.     }
  8.      
  9.     header( "Content-Disposition: attachment; filename=".$archivo."");
  10.     header( "Content-type: application/octet-stream" );  
  11.     header("Content-Length: ".filesize($ruta)); //header que envia al navegador el tamaño del archivo.
  12.      
  13.     @readfile( $ruta );  
  14.     ?>
y ahora todos los archivos de la carpeta archivos estaran accesibles dede
descarga.php?ruta=prueba.doc
y descargara el archivo archivos/prueba.doc
  #13 (permalink)  
Antiguo 20/11/2012, 15:37
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Guardar ruta de archivo y descargarlo de bd

Por que pones: href=\"descarga.php?ruta=archivos/$row[ruta]\"

Si ya en la variable ruta ya la tienes por que pones otra vez la carpeta ? por que en la variable ruta ya esta la dirección del archivo por que poner otra ruta ? o es que tu tenes el archivo fuera de la carpeta ?
  #14 (permalink)  
Antiguo 20/11/2012, 15:43
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

mmm.. si ya entendí tu idea abimex pero no me ha funcionado.. de cualquier forma muchas gracias por tomarte el tiempo en responderme :) seguiré intentando!
  #15 (permalink)  
Antiguo 20/11/2012, 15:47
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Guardar ruta de archivo y descargarlo de bd

Pero la carpeta archivos es donde esta el documento que se va a descargar ?
  #16 (permalink)  
Antiguo 20/11/2012, 15:52
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

Cita:
Iniciado por DeivisAndres Ver Mensaje
Por que pones: href=\"descarga.php?ruta=archivos/$row[ruta]\"

Si ya en la variable ruta ya la tienes por que pones otra vez la carpeta ? por que en la variable ruta ya esta la dirección del archivo por que poner otra ruta ? o es que tu tenes el archivo fuera de la carpeta ?

DeivisAndres.. me he guiado de un ejemplo que encontré porque no tenía idea de como hacerlo Y no, no tengo el archivo fuera de la carpeta..

Sigo intentando solucionarlo.. Gracias por tus respuestas!!
  #17 (permalink)  
Antiguo 20/11/2012, 16:13
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Guardar ruta de archivo y descargarlo de bd

Por ejemplo tu guardas el archivo de esta manera o como lo tengas y digamos que su valor es:

Código Javascript:
Ver original
  1. $ruta_destino = "documentos/prueba.docx";

porque no lo pruebas de esa manera: href=\"descarga.php?ruta=$row[ruta]\"

Código Javascript:
Ver original
  1. $ruta = $_GET['ruta'];
  #18 (permalink)  
Antiguo 20/11/2012, 16:31
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

Pfff... me rindo.. ya probé todo lo que me han aportado y nada :/ de verdad que son muy amables al ayudarme pero no lo logro, no se cual sea el error pero muchas gracias por el tiempo que se tomaron en ayudarme.. tal vez no logro captar la idea o algo estoy haciendo mal.. seguiré intentando.
  #19 (permalink)  
Antiguo 20/11/2012, 16:54
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Guardar ruta de archivo y descargarlo de bd

Prueba de esta manera para ver: href=\"$row[ruta]\"
  #20 (permalink)  
Antiguo 20/11/2012, 17:03
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

Mi error...

Será que la ruta que le estoy dando para guardarlo es la de mi carpeta local (la que esta en C) y de donde intento descargar es de la bd.. o algo así creo que estoy haciendo.. porque el de la carpeta local lo abre bien pero al hacer el listado e intentar descargarlo de ahí ya no puedo..
  #21 (permalink)  
Antiguo 20/11/2012, 17:14
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Guardar ruta de archivo y descargarlo de bd

Inténtalo no se pierde nada, de todas formas hay que especificar bien la ruta, de todas formas mira este link es lo mismo que quieres hacer: Almacenar ruta de archivo (servidor) en BD para su deskrga.
  #22 (permalink)  
Antiguo 20/11/2012, 17:33
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Guardar ruta de archivo y descargarlo de bd

Ya lo estoy checando DeivisAndres.. muchas gracias por la paciencia! espero que me sirva :)
  #23 (permalink)  
Antiguo 21/11/2012, 12:33
 
Fecha de Ingreso: octubre-2012
Ubicación: México
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 1
De acuerdo Respuesta: Guardar ruta de archivo y descargarlo de bd

DeivisAndres y Abimex

Por fin.. solucioné mi problema!! la ruta quedó así:

Código PHP:
<a href="archivos/".$row['ruta']."\">Descargar</a> 
Muchas gracias por su ayuda!!

Saludos y que esten muy bien!
  #24 (permalink)  
Antiguo 21/11/2012, 12:49
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
De acuerdo Respuesta: Guardar ruta de archivo y descargarlo de bd

Excelente que lo solucionaras

Etiquetas: bd, formulario, mysql, ruta, 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 21:39.