Joomla.it Forum

Non solo Joomla... => Sviluppo => Topic aperto da: saldesiderio - 10 Giu 2014, 10:15:01

Titolo: [RISOLTO] Upload file lato Back end: fallito spostamento del file!
Inserito da: saldesiderio - 10 Giu 2014, 10:15:01


Ciao a tutti,
sto sviluppando un componente che prevede l'upload di file lato back end.
Sto lavorando con jommla 2.5.


Nel file Cliente.xml ho inserito un field type file:

<field
                    name="file_up"
                    type="file"
                    label="UPLOAD_LABEL"
                    description="UPLOAD_DESC"
                    default=""
      />


Nel file Edit.php della view :


<form action="index.php" method="post" name="adminForm" id="cliente-admin-form" class="form-validate" enctype="multipart/form-data">
......
.......(richiamo i vari input)
</form>




Nel save() del model cliente.php :



            //Retrieve file details from uploaded file, sent from upload form
            $file = JRequest::getVar('jform', null, 'files', 'array');


            //Import filesystem libraries. Perhaps not necessary, but does not hurt
            jimport('joomla.filesystem.file');


            //Clean up filename to get rid of strange characters like spaces etc
            $filename = JFile::makeSafe($file['name']);


            //Set up the source and destination of the file
            $src = $file['tmp_name'];
            $dest = JPATH_COMPONENT . DS . "uploads" . DS . $file['name'];
           
            JFile::upload($src, $dest);


            parent::save($data);




Quando effettuo il save mi da il seguente errore:
 - fallito spostamento del file!


Dove sbaglio?


Grazie
Salvatore
Titolo: Re:Upload file lato Back end: fallito spostamento del file!
Inserito da: mau_develop - 10 Giu 2014, 11:51:44
Prova a fare una ricerca sul forum per vedere quando appare quell'errore,  sono sempre due i motivi
..comunque devo avertelo già detto in qualche post, trascuri completamente la sicurezza e varie BP, forse fai cose senza capire realmente il perché...
Titolo: Re:Upload file lato Back end: fallito spostamento del file!
Inserito da: saldesiderio - 10 Giu 2014, 12:08:05
Ciao,


in cosa trascuro la sicurezza?


cosa intendi per BP?


Ovvio che una volta capito come effettuare un corretto upload, dovrò inserire una serie di controlli sul file prima del suo caricamento effettivo!


Grazie
S.D.
Titolo: Re:Upload file lato Back end: fallito spostamento del file!
Inserito da: mmleoni - 10 Giu 2014, 13:55:49
parti dal controllare qual è il nome del field del file!


$file = JRequest::getVar('file_up', null, 'files', 'array');


ciao,
marco
Titolo: Re:Upload file lato Back end: fallito spostamento del file!
Inserito da: saldesiderio - 10 Giu 2014, 20:21:21
Ciao Marco,


- se faccio un var_dump($file) dove:
  $file = JRequest::getVar('file_up', null, 'files', 'array');
 
   mi restituisce null


- se lo faccio su :
  $file= JRequest::getVar('jform',null,'files','array');


  mi restituisce
 
[size=78%]  array[/size][/size][/size][size=78%](size=5)[/size]
  'name' => array (size=1) 'file_up' => string 'DURC.pdf' (length=8) 'type' => array (size=1) 'file_up' => string 'application/pdf' (length=15) 'tmp_name' => array (size=1) 'file_up' => string '/Applications/MAMP/tmp/php/phpWg3qbQ' (length=36) 'error' => array (size=1) 'file_up' => int 0 'size' => array (size=1) 'file_up' => int 74581



Come puoi notare i riferimento al pdf caricato ci sono!


Grazie
S.D.

Titolo: Re:[RISOLTO] Upload file lato Back end: fallito spostamento del file!
Inserito da: saldesiderio - 10 Giu 2014, 21:10:33



Finalmente ho risolto,


giustamente $file= JRequest::getVar('jform',null,'files','array'); restituisce un array!
quindi alla funzione JFile::upload vanno passati i percorsi nel modo seguente
JFile::upload($src['file_up'], $dest);




Blocco di codice completo:


//Retrieve file details from uploaded file, sent from upload form
$file = JRequest::getVar('jform', null, 'files', 'array');
           
//Import filesystem libraries. Perhaps not necessary, but does not hurt
jimport('joomla.filesystem.file');


//Clean up filename to get rid of strange characters like spaces etc
$filename = $file['name'];


//Set up the source and destination of the file
$src = $file['tmp_name'];
           
$dest = JPATH_COMPONENT . DS . "uploads" . DS . $filename['file_up'];


JFile::upload($src['file_up'], $dest);




Io ho risolto così!
Ora cercherò di inserire più controlli possibili sul codice per aumentare la sicurezza!!!


Ciao e Grazie a tutti!


S.D