COmo puedo subir archivos a distintas carpetas

Tengo mi codigo que sube archivos de todo tipo a la carpeta files pero todo lo almacena ahi.
pero lo que quiero es crear carpetas uno de img el otro de pdf el otro de otros archivos donde pueda almacenar a cualquiera de las 3 carpetas

Comentarios

  • Hola williamcc, entonces lo que debes hacer es analizar primero el mime de cada archivo utilizando Fileinfo (http://www.php.net/manual/es/ref.fileinfo.php), también puedes hacerlo según la extensión del archivo pero el mime es más efectivo.

    Puedes también observar el mime en el array $_FILES, utilizando $_FILES["campo_formulario"]["type"].

    Luego que tienes el tipo de archivo lo subes en img/, files/ o la carpeta que quieras.

    Es tan simple como eso. Te paso un ejemplo muy básico utilizando la clase Upload() como para que te des una idea pero deberás ajustarlo según tu estructura de directorios, etc:

    <?php
    class Archivos{
    public function uploadArchivo($field){

    $tipo = $this->getTipoByMime($_FILES[$field]["type"]);
    $archivo = Upload::factory($field, $tipo); 

    if ($tipo == "image"){ 
    $archivo->setExtensions(array('jpg', 'png', 'gif', 'jpeg'));
    $ruta = "img/";
     }elseif ($tipo == "file"){ 
     $archivo->setExtensions(array('doc', 'docx', 'pdf')); 
    $ruta = "files/";
     }

    $archivo->setPath($_SERVER['DOCUMENT_ROOT'] . '/default/public/' . $ruta);

    if ($archivo->isUploaded()) {
    if ($archivo->save()) {
    ....
    }
    }
    }

        private function getTipoByMime($mime){
            switch ($mime){
                case "image/jpeg":
                case "image/pjpeg":
                case "image/png":
                case "image/gif":
                    return "image";
                break;

                case "application/pdf":
                case "application/msword":
                case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
                    return "file";
                break;
            }
            }
            
            
        }

    Espero te sirva, saludos.
  • muchas gracias por tu ayuda pero lo que yo quiero es por decir tengo 3 carpetas uno que almacene pdf pero ahi adentro de esa carpetra otros dos donde se pueda almacenar por decir reportes anuales a la primera carpeta y reportes semestrales a la segunda carpeta pero que yo elija cual sera el destino
  • Entonces no deberás hacer más que enviarlo como un parámetro a tu función que haga el upload,
  • $this->listmaterias= Load::model('tpreguntas')->listmaterias(); 
                    //View::select('index');  //para mostrar siempre la vista con los formularios
                    if (Input::hasPost('oculto'))
                    {  //para saber si se envió el form
                        $materia=Input::request('materia');
                        if ($materia==null)
                        {
                            Flash::warning('Tiene que seleccionar una materia');
                        }
                        else
                        { 
                            $archivo = Upload::factory('archivo');//llamamos a la libreria y le pasamos el nombre del campo file del formulario
                            $nombre = $_FILES['archivo']['name'];
                            //$archivo->setExtensions(array('pdf','zip','rar','docx')); //le asignamos las extensiones a permitir
                            $archivo->setExtensions(array('pdf')); //le asignamos las extensiones a permitir
                            if ($archivo->isUploaded())
                            {
                                $matematica = new Tpreguntas (Input::post('tpreguntas'));
                                $matematica->begin();
                                $matematica->f_archivo = $nombre;
                                $matematica->f_materia = $materia;
                                $matematica->f_numero_respuesta = 'null';
                                $matematica->f_numero_pregunta = 'null';
                                $matematica->f_gestion = (Session::get('gestionactual'));
                                $matematica->f_usuario_crea = (Session::get('identidad'));
                                $matematica->f_borrado = 'N';
                                $matematica->f_fecha_crea=date("Y-m-d H:i");
                                if ($archivo->save() && $matematica->save())
                                {
                                    $matematica->commit();
                                    //echo 'Nombre del ----------'.$nombre.'------------';
                                    Flash::valid('Archivo ['.$nombre.'] con preguntas de '.$materia.' guardado correctamente');
                                }
                            }
                            else
                            {
                                //$archivo->rollback();
                                Flash::warning('No se ha Podido Subir el Archivo...!!!');
                            }
                        }
                    }

  • ese es mi codigo  en mi controlador y tube que modificar del core el archivo upload y ahi puse la ruta a donde tiene que guardar el archivo pero lo que yo quiero es usar varias carpetas
  • por si acaso no tendran algun ejemplito donde se pueda modificar la ruta? desde el controller por favor
Sign In or Register to comment.