Christian Castelli
a- a+

Lavorare con i files e le directory (Parte II)

LAVORARE CON I FILES E LE DIRECTORY

Upload di un nuovo file

Quando si fa l'upload di un nuovo file,<cffile> richiede ancora tre attributi:

Gli attributi di <cffile> per fare l'upload di file

Attributo

Descrizione

action deve essere settato per fare l'upload
fileField la variabile del form che contiene il file caricato
destination il percorso assoluto alla directory in cui risiede ilfile caricato

Ci sono altri due attributi utili ma non obbligatori:

Attributi addizionali di <cffile> per fare l'upload di file

Attributo

Descrizione

nameconflict contiene i possibili valori error,overwrite, skip, emakeunique. error è ilvalore di default.
accept Una lista dei tipi di file che possono essere caricati

Il seguente esempio permette ad un utente di farel'upload di un nuovo file di log alla directoryLogs.

Es.3: AddLog.cfm

<html>  <head>    <title>Aggiunta di un nuovo log</title>  </head>  <body>    <cfif isDefined("FORM.submitted")>   <cfset uploaddir = ExpandPath("Logs")>   <cffile action="upload" filefield="FORM.logfile"destination="#uploaddir#" accept="text/plain" nameconflict="#FORM.conflict#">   <h2>Log aggiunto</h2>   <a href="RunningLogList.cfm">Guarda tutti i log</a>    <cfelse>  <h1>Aggiungi un nuovo log</h1>  <cfoutput>  <form method="post" enctype="multipart/form-data" action="#CGI.SCRIPT_NAME#">  </cfoutput>  <input type="hidden" name="submitted" value="true">  <p>Log: <input type="file" name="logfile" accept="text/plain"></p>  <p>Cosa vuoi fare se esiste già un file con questo nome?</p>  <select name="conflict">   <option value="makeunique">Crea un nuovo nome</option>   <option value="overwrite">Sovrascrivi il file esistente</option>   <option value="error">Non sovrascrivere ma lancia un errore</option>   <option value="skip">Non sovrascrivere e ignora</option>  </select>  <p align="center">    <input type="submit" value="Aggiungi un log">  </p>  </form>  </cfif>    </body>  </html>

 

<a href="/img/22/iframe_CF_files2.html" title="Vedi esempio">Vedi codice</a>;

 

Alcune note riguardo al codice soprastante:

  • questa pagina sottopone il form a sé stessa;
  • il tag <form> ha l'attributo enctype con il valore settato a multipart/form-data. Ciò permette l'upload di file;
  • il form ha un campo di testo, che permette all'utente di selezionare il file sulla macchina client. Il tag <cffile> usa questa variabile come campo di file;
  • il form ha un menu di selezione che permette all'utente di determinare come gestire i conflitti di nominazione dei file. Il tag <cffile> usa questa variabile come valore per l'attributo nameconflict.


Funzioni per i file

La tabella sottostante mostra alcune funzioni utili per lagestione dei file:

Funzioni per i file

Funzione

Descrizione

FileExists(path_al_file) ritorna true se il file esiste,false altrimenti.
ExpandPath(path_al_file) ritorna il percorso assoluto al file
GetFileFromPath(path_al_file) ritorna il nome del file a partire dal suo percorsoassoluto


Usare <cfdirectory>

Il tag <cfdirectory> viene usato perlavorare con le directory. Il suo attributoaction detta quale azione verrà eseguitasulla directory in questione. La tabella sottostante descrivele differenti azioni che posson oessere eseguite:

Le azioni di <cfdirectory>

Azione

Descrizione

list legge il contenuto di una directory presente sul servere lo memorizza in un oggetto query
create crea una nuova directory sul server
move sposta una directory sul server da una posizioneall'altra
rename rinomina (o sposta) una directory sul server


Elencare il contenuto di una directory

Il seguente esempio mostra una lista dei contenuti delladirectory con <cfdirectory>.

Es.4: RunningLogList.cfm

<html>  <head>  <title>Esecuzione del log</title>  </head>  <body>  <h1>Esecuzione del log</h1>  <cfdirectory action="list" directory="#ExpandPath('Logs')#" name="loglist">    <table border="1">  <tr>   <th>Nome del file</th>   <th>Dimensione</th>   <th>File o Directory</th>   <th>Ultima modifica</th>  </tr>   <cfoutput query="loglist">   <tr>    <td><a href="RunningLog-2.cfm?log=#name#">#name#</a></td>    <td>#size#</td>    <td>#type#</td>    <td>#DateLastModified#</td>   </tr>   </cfoutput>  </table>  </body>  </html>

 

<a href="/img/22/iframe_CF_files3.html" title="Vedi esempio">Vedi codice</a>;

 

Note riguardo al codice:

  • la funzione ExpandPath() viene usata nell'attributo directory per trovare il percorso assoluto al file dei log;
  • <cfdirectory> ritorna il contenuto della directory come un oggetto di tipo query, proprio come sarebbe per una normale query ad un database. Il tag <cfoutput> viene usato con l'attributo di query settato con il nome specificato in <cfdirectory> per iterare il contenuto della directory;
  • le colonne del risultato ritornato da <cfdirectory> includono Nome, Dimensione, Tipo, Ultima modifica.
  • il nome del file viene linkato a RunningLog-2.cfm con il nome del file spedito nella query string.

RunningLog-2.cfm è uguale aRunningLog.cfm ad eccezione che il file cheviene letto viene determinato dal valore passato nella querystring. Segue il codice.

Es.5: RunningLog-2.cfm

<cfparam name="URL.log" default="RunningLog.txt">  <html>  <head>    <title>Esecuzione del log</title>  </head>  <body>  <h1>Esecuzione del log</h1>  <a href="AddEntry.cfm">Aggiungi una nuova voce</a><hr/>  <cfset RunningLogPath = ExpandPath("Logs/#URL.log#")>  <cfset CrLf = chr(10) & chr(13)>  <cfif FileExists(RunningLogPath)>   <cffile action="read" file="#RunningLogPath#" variable="myfile">   <cfloop list="#myfile#" index="run" delimiters="#CrLf#">    <cfoutput>#run#<br></cfoutput>   </cfloop>  <cfelse>     Sembra non sia mai stato creato il log.  </cfif>  </body>  </html>

 

<a href="/img/22/iframe_CF_files4.html" title="Vedi esempio">Vedi codice</a>;

 


Le funzioni per le directory

La tabella sottostante mostra alcune funzioni ColdFusion pertrattare le directory:

Funzioni per le directory

Funzione

Descrizione

DirectoryExists(path_alla_dir) ritorna true se la directory esiste,false altrimenti.
ExpandPath(path_alla_dir) ritorna il percorso assoluto alla directory
GetDirectoryFromPath(path_alla_dir) ritorna la directory corrispondente al percorsoassoluto specificato


Conclusioni

In questa lezione avete imparati a leggere e manipolare ifile e le directory presenti sul server. Sebbene scrivere eleggere i file possa essere utile in certe circostanze, comead esempio per accedere e modificare velocemente dei dati emantenere l'integrità di tali dati, spessoè consigliabile usare un database.



Ti potrebbe interessare anche

commenta la notizia