Joomla.it Forum
Non solo Joomla... => Sviluppo => : vinset 16 Dec 2010, 11:50:18
-
Qualcuno potrebbe dirmi come inserire un campo per l'upload di un file nel form di registrazione senza l'utilizzo di altri componenti specifici. In parole povere, le righe di codice da inserire. Allo stato attuale ho inserito nel form il campo upload file e creato una campo nella tabella jos_users nel quale immagazzinare il percorso del file. Allo stato attuale, quindi, viene esclusivamente salvato il nome del file all'interno del database ma non viene salvato il file stesso in una cartella.
-
http://api.joomla.org/Joomla-Framework/FileSystem/JFile.html
M.
-
Grazie per il link! Il problema ora è questo: su quale file devo agire?
-
Ho risolto quasi in toto il problema!
Ho aggiunto al file user.php che risiede nella cartella libraries/joomla/database/table la seguente porzione di codice:
$file = JRequest::getVar('curriculum', null, 'files', 'array');
jimport('joomla.filesystem.file');
$filename = JFile::makeSafe($file['name']);
//Set up the source and destination of the file
$src = $file['tmp_name'];
$dest = JPATH_BASE . DS . "curriculum" . DS . $filename;
$this->curriculum = $dest;
Funziona sia la memorizzazione del file nella cartella che del suo percorso di residenza nel database.
Il problema si pone nel caso in cui un utente carica un file avente lo stesso nome di uno precedentemente caricato in quanto lo stesso si va a sovrascrivere a quello esistente.
Come potrei ovviare a questo problema?
-
Ciao io uso un semlice escamotage, ovvero aggiungo un numero in fondo ai file che si sovrappongono.
Ti spiego il meccanismo copiato da un componente che ho sviluppato adattato al tuo esempio
$file = JRequest::getVar('curriculum', null, 'files', 'array');
jimport('joomla.filesystem.file');
$filename = JFile::makeSafe($file['name']);
//Set up the source and destination of the file
$src = $file['tmp_name'];
$filename_tmp=$src;
$j=1;
$directory=JPATH_BASE . DS . "curriculum" . DS;
while(JFile::exists($directory.$filename_tmp)){
$filename_tmp=JFile::stripExt($src).'_'.$j.'.'.JFile::getExt($src);
$j++;
}
$dest = $directory.$filename_tmp;
$this->curriculum = $dest;
Spero di esserti stato d'aiuto.
buona giornata
-
Grazie mille per il suggerimento!
Ecco il codice con cui ho risolto il problema:
//Upload file
$file = JRequest::getVar('curriculum', null, 'files', 'array');
jimport('joomla.filesystem.file');
$filename = JFile::makeSafe($file['name']);
//Set up the source and destination of the file
$src = $file['tmp_name'];
$dest = JPATH_BASE . DS . "curriculum" . DS . $filename;
$ext = strtolower(JFile::getExt($filename));
$j=1;
while(JFile::exists($dest)){
$filename=JFile::stripExt($filename).'_'.$j.'.'.$ext;
$j++;
$dest = JPATH_BASE . DS . "curriculum" . DS . $filename;
}
$this->curriculum = $filename;
JFile::upload($src, $dest);
-
Ho risolto quasi in toto il problema!
Ho aggiunto al file user.php che risiede nella cartella libraries/joomla/database/table la seguente porzione di codice:
$file = JRequest::getVar('curriculum', null, 'files', 'array');
jimport('joomla.filesystem.file');
$filename = JFile::makeSafe($file['name']);
//Set up the source and destination of the file
$src = $file['tmp_name'];
$dest = JPATH_BASE . DS . "curriculum" . DS . $filename;
$this->curriculum = $dest;
Funziona sia la memorizzazione del file nella cartella che del suo percorso di residenza nel database.
Il problema si pone nel caso in cui un utente carica un file avente lo stesso nome di uno precedentemente caricato in quanto lo stesso si va a sovrascrivere a quello esistente.
Come potrei ovviare a questo problema?
mettendo questo codice è possibile uploadare file??
in che posizione lo devo mettere dentro la pagina user.php?