|
Using cffile
You can use the cffile tag to work with files on the
server in several ways:
Upload
files from a client to the web server using an HTML form
Move, rename, copy, or delete files on the server
Read, write, or append to text files on the server
You use the action attribute to specify any
of the following file actions: upload, move, rename, copy, delete, read, readBinary, write,
and append. The required attributes depend on the action specified.
For example, if action="write", ColdFusion expects
the attributes associated with writing a text file.
Note: Consider the security and logical structure
of directories on the server before allowing users access to them.
You can disable the cffile tag in the ColdFusion Administrator.
Also, to access files that are not located on the local ColdFusion system,
ColdFusion services must run using an account with permission to
access the remote files and directories.
Uploading filesFile
uploading requires that you create two files:
The following procedures describe how to create these files.
Create an HTML file to specify file upload informationCreate a ColdFusion page with the following content:
<head><title>Specify File to Upload</title></head>
<body>
<h2>Specify File to Upload</h2>
<!--- the action attribute is the name of the action page --->
<form action="uploadfileaction.cfm"
enctype="multipart/form-data"
method="post">
<p>Enter the complete path and filename of the file to upload:
<input type="file"
name="FiletoUpload"
size="45">
</p>
<input type="submit"
value="Upload">
</form>
</body>
Save the file as uploadfileform.cfm in the myapps directory
under your web_root and view it in the browser.
Note: The form does not work until you write an action
page for it (see the next procedure).
Reviewing the codeThe following table describes the code and its
function:
Code
|
Description
|
<form action="uploadfileaction.cfm" enctype="multipart/form-data" method="post">
|
Create a form that contains file selection
fields for upload by the user. The action attribute
value specifies the ColdFusion template that processes the submitted form.
The enctype attribute value tells the server that
the form submission contains an uploaded file. The method attribute
is set to post to submit a ColdFusion form.
|
<input type="file" name="FiletoUpload" size="45">
|
Allow the user to specify the file to upload.
The file type instructs the browser to prepare
to read and transmit a file from the user system to your server.
It automatically includes a Browse button to let the user look for
the file instead of manually entering the entire path and filename.
|
The user can enter a file path or browse
the system and select a file to send.
Create a ColdFusion
page with the following content:
<html>
<head> <title>Upload File</title> </head>
<body>
<h2>Upload File</h2>
<cffile action="upload"
destination="c:\temp\"
nameConflict="overwrite"
fileField="Form.FiletoUpload">
<cfoutput>
You uploaded #cffile.ClientFileName#.#cffile.ClientFileExt#
successfully to #cffile.ServerDirectory#.
</cfoutput>
</body>
</html>
Change the following line to point to an appropriate location
on your server:
destination="c:\temp\"
Note: This directory must exist on the server.
Save the file as uploadfileaction.cfm in the myapps directory
under your web_root.
View uploadfileform.cfm in the browser, enter a file to upload,
and submit the form.
The file you specified uploads.
Reviewing the codeThe following table describes the code and its
function:
Code
|
Description
|
|
Output the name and location of the uploaded
file on the client machine.
|
|
Specify the destination of the file.
|
|
If the file exists, overwrite it.
|
fileField="Form.FiletoUpload">
|
Specify the name of the file to upload.
Do not enclose the variable in number signs.
|
You uploaded #cffile.ClientFileName#.#cffile.
ClientFileExt# successfully to
#cffile.ServerDirectory#.
|
Inform the user of the file that was uploaded
and its destination. For information on scope variables, see Evaluating the results of a file upload.
|
Note: This example performs
no error checking and does not incorporate any security measures.
Before deploying an application that performs file uploads, ensure
that you incorporate both error handling and security. For more
information, see Securing Applications and Handling Errors.
Resolving conflicting filenamesWhen you save a file to the server, a
file with the same name could exist. To resolve this problem, assign
one of these values to the nameConflict attribute of
the cffile tag:
- Error
- (default) ColdFusion stops processing the page and returns
an error. The file is not saved.
- Skip
- Allows custom behavior based on file properties. The tag
does not save the file or return an error.
- Overwrite
- Overwrites a file that has the same name as the uploaded
file.
- MakeUnique
- Generates a unique filename for the uploaded file. The name
is stored in the file object variables serverFile and serverFileName.
You can use this variable to record the name used when the file
was saved. The unique name might not resemble the attempted name.
For more information on file upload status variables, see Evaluating the results of a file upload.
Controlling the type of file uploadedFor some applications, you could want
to restrict the type of file that is uploaded, for example, to not
accept graphic files in a document library.
You use the accept attribute to restrict the
type of file that you allow in an upload. When an accept qualifier
is present, the uploaded file MIME content type must match the criteria
specified or an error occurs. The accept attribute takes
a comma-separated list of MIME data names, optionally with wildcards.
The browser determines the file MIME type. Common types, such
as image/gif and text/plain, are registered in the browser.
Note: Current versions of Microsoft Internet Explorer
and Netscape support MIME type associations. Other browsers and
earlier versions might ignore these associations.
ColdFusion saves any uploaded file if you omit the accept attribute
or specify "*/*". You can restrict the file types, as demonstrated
in the following examples.
The following cffile tag saves an image file
only if it is in the GIF format:
<cffile action="Upload"
fileField="Form.FiletoUpload"
destination="c:\uploads\"
nameConflict="Overwrite"
accept="image/gif">
The following cffile tag saves an image file
only if it is in GIF or JPEG format:
<cffile action="Upload"
fileField="Form.FiletoUpload"
destination="c:\uploads\"
nameConflict="Overwrite"
accept="image/gif, image/jpeg">
Note: If you receive an error like "The MIME type
of the uploaded file (image/jpeg) was not accepted by the server",
enter accept="image/jpeg" to accept JPEG files.
This cffile tag saves any image file, regardless
of the format:
<cffile action="Upload"
fileField="Form.FiletoUpload"
destination="c:\uploads\"
nameConflict="Overwrite"
accept="image/*">
Setting file and directory attributesIn
Windows, you specify file attributes using attributes attribute
of the cffile tag. In UNIX, you specify file
or directory permissions using the mode attribute
of the cffile or cfdirectory tag.
WindowsIn Windows, you can set the following
file attributes:
To specify several attributes in
CFML, use a comma-separated list for the attributes attribute;
for example, attributes="ReadOnly,Hidden". If you
do not use the attributes attribute, the existing
attributes of the file are maintained. If you specify any other
attributes in addition to Normal, the additional attribute overrides
the Normal setting.
UNIXIn
UNIX, you can individually set permissions on files and directories
for each of three types of users—owner, group, and other. You use
a number for each user type. This number is the sum of the numbers
for the individual permissions allowed. Values for the mode attribute
correspond to octal values for the UNIX chmod command:
4 = read
2 = write
1 = execute
You enter permissions values
in the mode attribute for each type of user: owner, group,
and other in that order. For example, use the following code to
assign read permissions for everyone:
mode=444
To
give a file or directory owner read/write/execute permissions and
read-only permissions for everyone else:
mode=744
Evaluating the results of a file uploadAfter
a file upload is completed, you can retrieve status information
using file upload status variables. This status information includes
data about the file, such as its name and the directory where it
was saved.
You
can access file upload status variables using dot notation, using
either file.varname or cffile.varname. Although you can use either
the File or cffile prefix for file upload status variables, cffile
is preferred; for example, cffile.ClientDirectory. The File prefix
is retained for backward compatibility.
Note: File status variables are read only. They are
set to the results of the most recent cffile operation.
If two cffile tags execute, the results of
the first are overwritten by the subsequent cffile operation.
The following table describes the file upload status variables
that are available after an upload:
Variable
|
Description
|
attemptedServerFile
|
Initial name that ColdFusion uses when attempting
to save a file; for example, myfile.txt. (see Resolving conflicting filenames).
|
clientDirectory
|
Directory on the client system from which
the file was uploaded.
|
clientFile
|
Full name of the source file on the client
system with the filename extension; for example, myfile.txt.
|
clientFileExt
|
Extension of the source file on the client
system without a period; for example, txt (not .txt).
|
clientFileName
|
Name of the source file on the client system
without an extension; for example, myfile.
|
contentType
|
MIME content type of the saved file; for
example, image for image/gif.
|
contentSubType
|
MIME content subtype of the saved file;
for example, gif for image/gif.
|
dateLastAccessed
|
Date that the uploaded file was last accessed.
|
fileExisted
|
Indicates (Yes or No) whether the file existed
with the same path.
|
fileSize
|
Size of the uploaded file.
|
fileWasAppended
|
Indicates (Yes or No) whether ColdFusion
appended the uploaded file to an existing file.
|
fileWasOverwritten
|
Indicates (Yes or No) whether ColdFusion
overwrote a file.
|
fileWasRenamed
|
Indicates (Yes or No) whether the uploaded
file was renamed to avoid a name conflict.
|
fileWasSaved
|
Indicates (Yes or No) whether ColdFusion
saved the uploaded file.
|
oldFileSize
|
Size of the file that was overwritten in
the file upload operation. Empty if no file was overwritten.
|
serverDirectory
|
Directory where the file was saved on the
server.
|
serverFile
|
Full name of the file saved on the server
with the filename extension; for example, myfile.txt.
|
serverFileExt
|
Extension of the file saved on the server
without a period; for example, txt (not .txt).
|
serverFileName
|
Name of the file saved on the server without
an extension; for example, myfile.
|
timeCreated
|
Date and time the uploaded file was created.
|
timeLastModified
|
Date and time of the last modification to
the uploaded file.
|
Moving, renaming, copying, and deleting server filesWith the cffile tag, you can create application
pages to manage files on your web server. You can use the tag to
move files from one directory to another, rename files, copy a file,
or delete a file.
The examples in the following table show static values for many
of the attributes. However, the value of all or part of any attribute
in a cffile tag can be a dynamic parameter.
Action
|
Example code
|
Move a file
|
<cffile action="move" source="c:\files\upload\KeyMemo.doc" destination="c:\files\memo\">
|
Rename a file
|
<cffile action="rename" source="c:\files\memo\KeyMemo.doc" destination="c:\files\memo\OldMemo.doc">
|
Copy a file
|
<cffile action="copy" source="c:\files\upload\KeyMemo.doc" destination="c:\files\backup\">
|
Delete a file
|
<cffile action="delete" file="c:\files\upload\oldfile.txt">
|
This example sets the ReadOnly flag bit for the uploaded file:
<cffile action="Copy"
source="c:\files\upload\keymemo.doc"
destination="c:\files\backup\"
attributes="ReadOnly">
Note: Ensure that you include the trailing slash (\)
when you specify the destination directory. Otherwise, ColdFusion
treats the last element in the path as a filename. This rule only
applies to copy actions.
Reading, writing, and appending to a text fileIn addition to managing files on the server, you can use
the cffile tag to read, create, and modify
text files. As a result, you can do the following things:
Create log files. (You can also use cflog to
create and write to log files.)
Generate static HTML documents.
Use text files to store information that can be incorporated
into web pages.
Reading a text fileYou can use the cffile tag
to read an existing text file. The file is read into a local variable
that you can use anywhere in the application page. For example, you
could read a text file and then insert its contents into a database,
or you could read a text file and then use one of the string replacement
functions to modify the contents.
Read a text fileCreate a ColdFusion page with the following content:
<html>
<head>
<title>Read a Text File</title>
</head>
<body>
Ready to read the file:<br>
<cffile action="read"
file="C:\inetpub\wwwroot\mine\message.txt"
variable="Message">
<cfoutput>
#Message#
</cfoutput>
</body>
</html>
Replace C:\inetpub\wwwroot\mine\message.txt with the location
and name of a text file on the server.
Save the file as readtext.cfm in the myapps directory under
your web_root and view it in the browser.
Writing a text file on the serverYou can use
the cffile tag to write a text file based on dynamic
content. For example, you could create static HTML files or log
actions in a text file.
Create a form in to capture data for a text fileCreate a ColdFusion page with the following content:
<html>
<head>
<title>Put Information into a Text File</title>
</head>
<body>
<h2>Put Information into a Text File</h2>
<form action="writetextfileaction.cfm" method="Post">
<p>Enter your name: <input type="text" name="Name" size="25"></p>
<p>Enter the name of the file: <input type="text" name="FileName" size="25">.txt</p>
<p>Enter your message:
<textarea name="message"cols=45 rows=6></textarea>
</p>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
Save the file as writetextfileform.cfm in the myapps directory
under your web_root.
Note: The form does not work until you write an action
page for it (see the next procedure).
Write a text fileCreate a ColdFusion page with the following content:
<html>
<head>
<title>Write a Text File</title>
</head>
<body>
<cffile action="write"
file="C:\inetpub\wwwroot\mine\#Form.FileName#.txt"
output="Created By: #Form.Name#
#Form.Message# ">
</body>
</html>
Modify the path C:\inetpub\wwwroot\mine\ to point to a path
on your server.
Save the file as writetextfileaction.cfm in the myapps directory
under your web_root.
View the file writetextfileform.cfm in the browser, enter
values, and submit the form.
The text file is written to the
location you specified. If the file exists, it is replaced.
Appending a text fileYou
can use the cffile tag to append additional text
to the end of a text file; for example, when you create log files.
Append a text fileOpen the writetextfileaction.cfm file.
Change the value for the action attribute
from write to append so that the
file appears as follows:
<html>
<head>
<title>Append a Text File</title>
</head>
<body>
<cffile action="append"
file="C:\inetpub\wwwroot\mine\message.txt"
output="Appended By: #Form.Name#">
</body>
</html>
Save the file as writetextfileaction.cfm in the myapps directory
under your web_root.
View the file in the browser, enter values, and submit the
form.
The appended information displays at the end of the
text file.
|