Subida y bajada de archivos de files/upload

edited diciembre 2009 in Dudas/Problemas
He visto un mensaje que trata el tema (en kumbia 0.5) , pero no llega a funcionarme.
Utilizo Spirit 1.0
Mi intención, después de subir archivos a public/files/upload es que el usuario pueda visualizarlo...
*******************
En mi index.html tengo:
echo "<td>".link_to(array("expte/verInforme/$item->memoria/", img_tag('informe.jpg','BORDER: 0','WIDTH: 30')))."</td>";

****************************
en la acción correspondiente:
public function verInforme($url)
{
$this->archivo="files/upload/".$url;
}
***************************
y ejecuto la vista verInforme.phtml (lo he copiado texto de otra función que usé en el pasado fuera de kumbia):
<?php
header ("Content-Disposition: attachment; filename=".$archivo."\n\n");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($archivo));
readfile($archivo);
?>

******************
el resultado es que intenta descargar el archivo files_upload_ etc... me cambia los '\' por '_'. si pongo otro '\' antes de cada '\' para que me lo respete tampoco lo hace... entonces obtengo dos '__' cada vez.
He intentado hacerlo sin crearme acción ni vista, pero parece que lo necesito.
¿ Qué hago mal?
Muchas gracias de antemano...

Comentarios

  • Aqui tienes un ejemplo como subir archivo al servidor....

    <!-- m --><a class="postlink" href="http://paraisolinux.com/subir-imagenes-al-servidor-con-kumbiaphp/">http://paraisolinux.com/subir-imagenes- ... kumbiaphp/</a><!-- m -->
  • Perdona....
    El problema lo tengo para la bajada del mismo... La subida sí me funciona... no obstante, gracias por la respuesta.
    He intentado hacerlo con un simple:
    echo "<td WIDTH=40>"."<a href=".URL_PATH."files/public/".$item->memoria.">".img_tag('informe.jpg','BORDER: 0','WIDTH: 30' )."</a></td>";
    Pero tampoco funciona... en este caso me busca un controller llamado 'Files'.
    Suele pasar con los Frameworks, que te facilitan las cosas, pero luego algo sencillo que ya estaba hecho no tienes claro cómo hacerlo...
    Te espero... y gracias de nuevo.
  • dime cual es la ruta del archivo en el servidor para decirte cual es la URL correcta...
  • Los documentos se suben por ahora a public/files/upload... (mi intención es luego ponerlo si es posible fuera de public, por temas de seguridad)....
    gracias...
  • Por fin.... lo he conseguido:
    PRIMERO:
    Veo que poniendo la ruta absoluta en el servidor sí me descarga:
    en index.phtml:
    link_to(array("expte/verInforme/$item->memoria/", img_tag('informe.jpg','BORDER: 0','WIDTH: 30')))

    en la acción verInforme() no hago casi nada (pongo la ruta, pues en el campo $item->memoria solo almaceno el nombre del archivo:
    public function verInforme($url) ... y lanzo su vista pero sin template:
    {
    $this->archivo="F:\\xampp\\htdocs\\concierta2app\\public\\files\\upload\\".$url;
    $this->render('verInforme', null);
    }

    y en la vista:
    <?php
    header ("Content-Disposition: attachment; filename=".$archivo."\n\n");
    header ("Content-Type: application/octet-stream");
    header ("Content-Length: ".filesize($archivo));
    readfile($archivo);
    ?>
    Gracias deivinsontejeda ...
    Un saludo.
  • Bueno de esa forma solo te funcionara en Windows, pudieras hacer uso de la constante APP_PATH que es construida por KumbiaPHP y asi te funcionara corriendo sobre cualquier SO

    $this->archivo=APP_PATH . "\\public\\files\\upload\\".$url;

    aunque con esto tambien debe funcionarte...

    $this->archivo=PUBLIC_PATH . "/files/upload/".$url;

    El cliente solo entiendes de URL relativas al DocumentRoot, no de rutas absolutas del lado servidor....
  • hola estoy realizando un sistema de correspondencia donde quiero
    incorporarle la funcion de carga y descarga de documentos. ya coloque la
    vista donde adjunta el documento, quiero colocar una carpeta donde se
    almacenen los documentos y que la ruta donde esta el documento la tenga
    la base de datos con la finalidad de colocar un link que descargue el
    documento...
    modelo:
    <?php
    Load::lib('adjunto_controller');

    class CorrespTbladjunto extends ActiveRecord {
     

        public function GetAdjunto()
    {

            $id = $_REQUEST['id']; // Obtener el id de una consulta POST o GET
            $model = Archivo::model()->findByPk($id); // Trae los datos de un registro especifico del modelo Archivo
            $content = $model->archivo; // Sacamos en valor de 'archivo' de la consulta
            // header HTML
            header("Cache-Control: public");
            header("Content-Description: File Transfer");
            header("Content-Type: application/octet-stream; ");
            header("Content-Disposition: attachment; filename=archivo.txt");
            header("Content-Transfer-Encoding: binary");

            // agregar el contenido
            print_r($content);
    }
    ?>

    vista para la carga:
        <div>
        <label>Adjuntar Archivo</label>
        <?php echo Form::openMultipart('corresp_tbladjunto.strasunto', $archivo);?>
        <?php echo Form::file('archivo');?>
                                           
         </div>

    controlador:
    public function descargar {

        <?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 ); 
    }

    ?>

    en que estoy fallando?? soy nueva progamando y les agradezco sus respuesta...
Sign In or Register to comment.