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:
|
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:
|
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>
Alcune note riguardo al codice soprastante:
- questa pagina sottopone il form a sé stessa;
-
il tag
<form>ha l'attributoenctypecon il valore settato amultipart/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'attributonameconflict.
Funzioni per i file
La tabella sottostante mostra alcune funzioni utili per la gestione dei 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:
|
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>
Note riguardo al codice:
-
la funzione
ExpandPath()viene usata nell'attributodirectoryper 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.cfmcon 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>
Le funzioni per le directory
La tabella sottostante mostra alcune funzioni ColdFusion per trattare 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.
- Articolo precedente Lavorare con i files e le directory (Parte I)
- Articolo successivo Spedire e-mail con ColdFusion