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 il file 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, e makeunique. error è il valore di default.
accept Una lista dei tipi di file che possono essere caricati

Il seguente esempio permette ad un utente di fare l'upload di un nuovo file di log alla directory Logs.

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 la gestione 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 percorso assoluto


Usare <cfdirectory>

Il tag <cfdirectory> viene usato per lavorare con le directory. Il suo attributo action detta quale azione verrà eseguita sulla directory in questione. La tabella sottostante descrive le differenti azioni che posson oessere eseguite:

Le azioni di <cfdirectory>

Azione

Descrizione

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


Elencare il contenuto di una directory

Il seguente esempio mostra una lista dei contenuti della directory 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 a RunningLog.cfm ad eccezione che il file che viene letto viene determinato dal valore passato nella query string. 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 per trattare 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 percorso assoluto specificato


Conclusioni

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



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Luca
Ti è piaciuto l'articolo?