el script lo entiendo perfectamente. pero lo implemento y ni si quiera me da un error ..actualizo la carpeta de files en webroot y nada que sube el pdf
codigo: en el add del controller $name = $this->request->data['Orden']['doc']['name'];//--> nombre del archivo (como se va a guardar) $formdata = $this->request->data['Orden']['doc']; //--> el array que contiene la info del archivo $folder = 'files'; //--> la carpeta en la que se guarda $itemid = null; //--> opcional para crear una subcarpeta $this->_uploadFiles($name, $formdata, $folder, $itemid); ----------------- en el appcontroller function _uploadFiles($name, $formdata, $folder, $itemId=null) { // setup dir names absolute and relative $folder_url = WWW_ROOT.$folder; $rel_url = $folder; // create the folder if it does not exist if(!is_dir($folder_url)) { mkdir($folder_url); } // if itemId is set create an item folder if($itemId) { // set new absolute folder $folder_url = WWW_ROOT.'archivos/'.$folder.'/'.$itemId; // set new relative folder $rel_url = 'archivos/'.$folder.'/'.$itemId; // create directory //die($folder_url); if(!is_dir($folder_url)) { mkdir($folder_url); } } // list of permitted file types, this is only images but documents can be added $permitted = array('application/pdf' ,'application/x-pdf' ); // loop through and deal with the files foreach($formdata as $file) { // assume filetype is false $typeOK = false; // check filetype is ok foreach($permitted as $type) { if($type == $file['type']) { $typeOK = true; break; } } //$result = array('errors', 'nofiles', 'urls'); // if file type ok upload the file if($typeOK) { // switch based on error code switch($file['error']) { case 0: // check filename already exists if(!file_exists($folder_url.'/'.$name)) { // create full filename $full_url = $folder_url.'/'.$name; $url = $rel_url.'/'.$name; // upload the file $success = move_uploaded_file($file['tmp_name'], $url); } else { $success = 0; $result['errors'][] = "El archivo ya existe."; } // if upload was successful if($success) { // save the url of the file $result['urls'][] = $url; } else { $result['errors'][] = "Error en la subida del archivo. Por favor intente nuevamente."; } break; case 3: // an error occured $result['errors'][] = "Error subiendo el archivo. Por favor intente nuevamente."; break; default: // an error occured $result['errors'][] = "Error de sistema uploading el archivo. Contacte con el administrador."; break; } } elseif($file['error'] == 4) { // no file was selected for upload $result['nofiles'][] = "No ningun archivo seleccionado"; } else { // unacceptable file type $result['errors'][] = "El archivo no puede ser subido. Solo archivos: PDF."; } } return $result; } en teoria no esta realizando el return porque no lo estoy solicitando. aunque lo hice de la siguiente forma: public function add() { if ($this->request->is('post')) { $this->Orden->create(); //subiendo archivo $name = $this->request->data['Orden']['doc']['name'];//--> nombre del archivo (como se va a guardar) $formdata = $this->request->data['Orden']['doc']; //--> el array que contiene la info del archivo $folder = 'files'; //--> la carpeta en la que se guarda $itemid = null; //--> opcional para crear una subcarpeta $files_uploads = $this->_uploadFiles($name, $formdata, $folder, $itemid); $this->request->data['Orden']['doc'] = $files_uploads['urls'][0];; if ($this->Orden->save($this->request->data)) { $this->Session->setFlash(__('The orden has been saved')); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('The orden could not be saved. Please, try again.')); } } $users = $this->Orden->User->find('list'); $this->set(compact('users')); } y pues en este caso me dijo que no reconocia el indice urls entonces estoy suponiendo que ni si quiera esta pasando por el move_uploaded_file($file['tmp_name'], $url); seguire intentando.. On 26 nov, 03:42, Guillermo Arancio <quieneslat...@gmail.com> wrote: > Hola Omar, estuve revisando mis scripts y encontre uno que saque de > internet hace mucho para guardar un archivo en el webroot > > ahi te lo paso > > $name --> nombre del archivo (como se va a guardar) > $formdata --> el array que contiene la info del archivo > $folder --> la carpeta en la que se guarda > $itemid --> opcional para crear una subcarpeta > > esta funcion la cree en el modelo > > function _uploadFiles($name, $formdata, $folder, $itemId = null) { > // setup dir names absolute and relative > $folder_url = WWW_ROOT.$folder; > $rel_url = $folder; > > // create the folder if it does not exist > if(!is_dir($folder_url)) { > mkdir($folder_url); > } > > // if itemId is set create an item folder > if($itemId) { > // set new absolute folder > $folder_url = WWW_ROOT.'archivos/'.$folder.'/'.$itemId; > // set new relative folder > $rel_url = 'archivos/'.$folder.'/'.$itemId; > // create directory > > //die($folder_url); > if(!is_dir($folder_url)) { > mkdir($folder_url); > } > } > > // list of permitted file types, this is only images but documents > can be added > //$permitted = > array('image/gif','image/jpeg','image/pjpeg','image/png'); > $permitted = array('application/pdf' ,'application/x-pdf' ); > //solo sube pdfs > > // loop through and deal with the files > foreach($formdata as $file) { > // assume filetype is false > $typeOK = false; > // check filetype is ok > foreach($permitted as $type) { > if($type == $file['type']) { > $typeOK = true; > break; > } > } > //$result = array('errors', 'nofiles', 'urls'); > // if file type ok upload the file > if($typeOK) { > // switch based on error code > switch($file['error']) { > case 0: > // check filename already exists > if(!file_exists($folder_url.'/'.$name)) { > // create full filename > $full_url = $folder_url.'/'.$name; > $url = $rel_url.'/'.$name; > // upload the file > $success = > move_uploaded_file($file['tmp_name'], $url); > } else { > $success = 0; > $result['errors'][] = "El archivo ya existe."; > } > // if upload was successful > if($success) { > // save the url of the file > $result['urls'][] = $url; > } else { > $result['errors'][] = "Error en la subida del > archivo. Por favor intente nuevamente."; > } > break; > case 3: > // an error occured > $result['errors'][] = "Error subiendo el archivo. > Por favor intente nuevamente."; > break; > default: > // an error occured > $result['errors'][] = "Error de sistema uploading > el archivo. Contacte con el administrador."; > break; > } > } elseif($file['error'] == 4) { > // no file was selected for upload > $result['nofiles'][] = "No ningun archivo seleccionado"; > } else { > // unacceptable file type > $result['errors'][] = "El archivo no puede ser subido. Solo > archivos: PDF."; > } > } > return $result; > } > > y la llamo desde el controller de la siguiente manera: > > $result = $this->Documento->_uploadFiles($name, $formdata, $folder, > $subfolder); > //copio el resultado de la funcion en la variable que va a almacenar > la direccion del archivo > $this->data['Documento']['archivo'] = $result['urls'][0]; > > espero que te sirva. > > -- > Saludos Guillermo Arancio -- Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de Grupos de Google. Para publicar una entrada en este grupo, envía un correo electrónico a cakephp-es@googlegroups.com. Para anular tu suscripción a este grupo, envía un correo electrónico a cakephp-es+unsubscr...@googlegroups.com Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-es?hl=es.