ColdFusion 4 初级教程 文件 目录 操作

使用CFFILE

使用CFFILE
CFFILE标签使你能以几种不同的方式进行服务器端的文件操作:
· 利用HTML表单,从客户端将文件上载到服务器。
· 移动,重命名,复制或删除服务器上的文件。
·
对服务器上的文本文件进行读、写或追加操作。
要设置的属性依赖于ACTION属性的值,例如,如果设定ACTION=“Write”,则需要设置
与写文本文件有关的属性。
注意:在允许用户访问服务器上的文件之前,应考虑安全性以及目录结构等问题。


文件上载

文件上载
实现文件上载需要建立两个文件:
· 一个HTML表单,用于输入文件上载信息。
· 一个包含文件上载代码的cfm文件。
建立用于文件上载的HTML表单
大多数浏览器都支持文件上载。将HTML INPUT标签的类型设为“file”,则浏览器会准
备从客户端读取并传输一个文件给服务器。将ENCTYPE属性设为
“multipart/form-data”,则服务器会知道表单的提交包含了一个上载的文件。
例子:一个用于文件上载的HTML表单
<FORM ACTION="FileUpload.cfm"
ENCTYPE="multipart/form-data"
METHOD="Post">
<PRE>
File Name: <INPUT NAME="FileName"
TYPE="text">
File: <INPUT NAME="FileContents" TYPE="file">
<INPUT TYPE="submit" VALUE="Upload File">
</PRE>
</FORM>
用户可以输入一个文件的路径,或浏览本地的文件系统并选择一个要上载的文件。注意
必须将ENCTYPE属性设置为“multipart/form-data”。
建立一个文件上载的程序文件
提交一个文件后,该文件还没有保存到服务器上。它只是被译码然后与其它的表单数据
一起被传递给ACTION属性所指的程序文件,在该文件中由CFFILE标签对上载的文件进行
解码并保存到服务器上。
例子:上载一个文件
下面例子中的CFFILE标签可以放置在上一例子中所指的“FileUpload.cfm”文件中:
<CFFILE ACTION="UPLOAD"
FILEFIELD="FileContents"
DESTINATION="C:/Web/Uploads/">
如果请求此文件的文件上载表单传递了一个名为keyMemo.doc文件,则该文件在服务器
上被保存为:
C:/web/Uploads/keyMemo.doc
要以另外的文件名保存上载的文件,可以在DESTINATION属性中指定新文件名。在下面
的例子中,文件“keyMemo.doc”被保存为“UploadedFile.doc”:
<CFFILE ACTION="UPLOAD"
FILEFIELD="FileContents"
DESTINATION="C:/Web/Uploads/UploadedFile.doc">
你也可以将这些属性设置为动态参数。例如,你可以根据数据库查询的结果来设定文件
名。
注意:FILEFIELD属性应设定为一个Form字段的名字,而不是Form字段的值,因此不能
将字段名括在#号中。
处理文件名冲突
将一个文件保存到服务器上时,有可能已经有另一个同名的文件存在,在这种情况下,
利用NAMECONFLICT属性,你可以采取多种处理方法。
例子:解决文件名冲突
在下面的例子中,如果文件上载时发生名字冲突,程序会生成一个唯一的文件名,文件
后缀名保持不变:
<CFFILE ACTION="Upload"
FILEFIELD="FileContents"
DESTINATION="C:/Web/Uploads/"
NAMECONFLICT="MAKEUNIQUE">
 
控制上载文件的类型
对某些应用程序,你也许需要限制上载文件的类型。例如,在一个文档库中,你也许不
想接受图形文件。
ACCEPT属性用于限制允许上载的文件类型。指定了ACCEPT属性后,被上载文件的MIME内
容类型必须与指定的条件相匹配,否则就会产生错误。ACCEPT属性的值是一列由逗号隔
开的MIME数据类型名,其中可以使用通配符。
一个文件的MIME类型决定于浏览器,普通的类型如“image/gif”和“text/plain”等
已在浏览器中注册。
例子:限制文件类型
这个CFFILE 只保存GIF格式的图象文件:
<CFFILE ACTION="Upload"
FILEFIELD="UploadFile"
DESTINATION="c:/uploads/MyImage.GIF"
NAMECONFLICT="OVERWRITE"
ACCEPT="image/gif">
这个CFFILE 只保存GIF格式或JPEG格式的图象文件:
<CFFILE ACTION="Upload"
FILEFIELD="UploadFile"
DESTINATION="c:/uploads/MyImage.GIF"
NAMECONFLICT="OVERWRITE"
ACCEPT="image/gif, image/jpeg">
这个CFFILE只保存图象文件,但对其格式没有限制:
<CFFILE ACTION="Upload"
FILEFIELD="UploadFile"
DESTINATION="c:/uploads/MyImage.GIF"
NAMECONFLICT="OVERWRITE"
ACCEPT="image/*">
注意:如果ACCEPT属性被忽略或设为空或设为“*/*”,则所有类型的文件都可以被上
载。


设置文件和目录的属性


设置文件和目录的属性
在Windows中,用CFFILE的ATTRIBUTES属性定义文件属性;在UNIX中,用CFFILE和
CFDIRECTORYMDE属性定义文件和目录权限。
UNIX
在UNIX中,你可以对文件和目录设置权限。MODE属性的值相对应于UNIX命令chmod的十
进制数值。
· 4=读
· 2=读/写
· 1=读/写/执行
你应按照“所有者,组,其它用户”的顺序,为每种类型的用户设置权限值。例如,为
所有用户设置读权限:
MODE=444
Windows
在Windows中,你可以设置下面的文件属件:
????????· ReadOnly
????????· Temporary
????????· Archive
????????· ?Hidden
????????· ?System
????????· ?Normal
如果不使用ATTRIBUTES属性,则文件现有的属性被保留。如果同时指定了Normal属性和
任何其它属性,则Normal属性被其它属性所覆盖。
例子:设置文件属性
这个例子将上载的文件设为Archive属性:
<CFFILE ACTION=”copy”
SOURCE=”c:/files/upload/keymemo.doc”
DESTINATION=”c:/files/backup/”
ATTRIBUTES=”Archive”>


评价文件上载的结果


评价文件上载的结果
完成文件上载之后,你可以利用文件上载变量获取状态信息。状态信息包括与上载文件
有关的各种数据,如文件名和保存的路径等。
文件上载状态变量的推荐用法是使用CFFILE前缀,例如CFFILE.ClientDirectory。为了
向后兼容,File前缀仍可以使用。在任何可以使用ColdFusion变量的地方都可以使用文
件状态变量。
完成文件上载之后,下表中的各个状态变量即可以被引用:
 
文件上载变量
参数
描述
AttemptedServerFile
ColdFusion最初用来存储被上载文件的文件名,如myfile.txt。
ClientDirectory
被上载文件在客户系统中的目录位置。
ClientFile
被上载文件在客户系统中的文件名,如myfile.txt。
ClientFileExt
被上载文件在客户系统中的扩展名,不包括句号,如txt(而不是.txt)。
ClientFileName
被上载文件在客户系统中的文件名,不包括后缀名。
ContentSubType
被上载文件的MIME内容子类型,例如对image/gif即为gif。
ContentType
被上载文件的MIME内容类型,例如对image/gif即为image。
DateLastAccessed
被上载文件最后一次被访问的时间。
FileExisted
指明是否(yes或no)相同路径的文件已经存在。
FileSize
被上载文件的大小。
FileWasAppended
指明是否(yes/no)要ColdFusion将被上载文件追加到一个已经存在的文件中。
FileWasOverwritten
指明是否(yes/no)要ColdFusion覆盖一个文件。
FileWasRenamed
指明被上载文件是否(yes/no)因文件名冲突而被重命名。
FileWasSaved
指明ColdFusion是否保存了一个文件。
OldFileSize
在文件上载操作中被覆盖的文件的大小。
ServerDirectory
服务器上实际保存了被上载文件的目录。
ServerFile
实际保存到服务器上的文件名。
ServerFileExt
被上载文件在服务器上的文件后缀名,不包括句号,如txt。
ServerFileName
被上载文件在服务器上的文件名,不包括后缀名。
TimeCreated
被上载文件的创建时间。
TimeLastModified
被上载文件最后一次被修改的日期和时间。
引用这些变量时可以使用File前缀或CFFILE前缀,如#File.FileExisted#。
注意:文件状态变量是只读的。这些变量的值是最近一次CFFILE操作的执行结果,如果
执行了两个CFFILE标签,则第一个标签的执行结果被第二个所覆盖。



移动、重合名、复制和删除服务器端文件


移动、重合名、复制和删除服务器端文件
利用CFFILE,你可以对服务器上的文件进行移动、重命名、复制和删除等文件操作,在
下面的这些例子中,许多属性值均被设置为静态值,但是,CFFILE标签的所有属性的值
均可包含动态参数,这使得CFFILE的功能非常强大。
移动一个文件(ACTION=“MOVE”)
用CFFILE可以将服务器上的文件从一个位置移动到另一个位置。如下例,文件
“KeyMemo.doc”被从C:/files/upload/目录移动到C:/files/memo/目录:
<CFFILE ACTION="MOVE"
SOURCE="c:/files/upload/KeyMemo.doc"
DESTINATION="c:/files/memo/">
重命名一个文件(ACTION=“PENAME”)
用CFFILE可以将服务器上的文件重命名。如下例,文件KeyMemo.doc被重命名为
oldmemo.doc:
<CFFILE ACTION="Rename"
SOURCE="c:/files/memo/KeyMemo.doc"
DESTINATION="c:/files/memo/OldMemo.doc">
复制一个文件(ACTION=”COPY”)
用CFFILE可以将服务器上的文件从一个目录复制到另一个目录。下面的例子将文件
KeyMemo.doc的一个备份保存到C:/files/backup/目录:
<CFFILE ACTION="Copy"
SOURCE="c:/files/upload/KeyMemo.doc"
DESTINATION="c:/files/backup/">
删除一个文件(ACTION=“DELETE”)
用CFFILE可以删除服务器上的文件,下面的例子将指定的文件永久性删除:
<CFFILE ACTION="Delete"
FILE="c:/files/upload/攐ldfile.txt">



读、写和追加一个文本文件


读、写和追加一个文本文件
用CFFILE不仅可以操作服务器上的文件,还可以对文本文件进行读取,创建和修改。这
使你能够:
· 建立日志文件
· 生成静态HTML文档
·
用文本文件存储可以添加到网页中的信息
读文本文件(ACTION=“READ”)
你可以用CFFILE来读取一个已经存在的文本文件。文件被读取到一个动态参数中,你可
以在程序文件的任何位置使用该动态参数。例如,你可以读取一个文本文件,然后将其
内容插入到数据库中,你还可以读取文件然后使用查找和替换函数修改其内容。
下面的例子创建一个变量“Message”,用该变量保存文件“message.txt”的内容:
<CFFILE ACTION="Read"
FILE="C:/Web/message.txt"
VARIABLE="Message">
于是在应用程序文件中即可以使用变量“Message”。例如,你可以在网页中显示文件
message.txt的内容:
<CFOUTPUT>#Message#</CFOUTPUT>
写文本文件(ACTION=“WRITE”)
你可以用CFFILE根据动态内容写一个文本文件。例如,你可以建立一个HTML文件或日志
文件。
下面的例子用用户输入一个HTML插入表单中的信息建立一个文件:
<CFFILE ACTION="Write"
FILE="C:/files/updates/#Form.UpdateTitle#.txt"
OUTPUT="Created By: #Form.FullName#
Date: #Form.Date#
#Form.Content# ">
如果用户输入如下的信息并提交表单:
UpdateTitle="FieldWork"
FullName="John Lunch"
Date="10/1/98"
Content="We had a wonderful time in Cambridgeport."
则ColdFusion会在C:/files/updates/目录下建立一个文件Fieldwork.txt,该文件中包
含如下文本:
Created By: John Lunch
Date: 10/1/98
We had a wonderful time in Cambridgeport.
追加一个文本文件(ACTION=“APPEND”)
用CFFILE可以向一个已经存在的文本文件中追加文本,如日志文件。下面的例子向文件
Fieldwork.txt中追加一个字符串“But
Davis Square was more fun.”:
<CFFILE ACTION="Append"
DESTINATION="C:/files/updates/FieldWork.txt"
OUTPUT="<B>But Davis Square was more
fun.</B>">



执行目录操作


执行目录操作
CFDIRECTORY标签用于返回指定目录的文件信息,并可以对目录进行创建,删除和重命
名等操作。
与CFFILE一样,在ColdFusion Administrator中可以禁止CFDIRECTORY标签。
CFDIRECTORY的各属性如下表所列:
CFDIRECTORY 属性
属性
描述
ACTION
可选。定义要对DIRECTORY属性中指定的目录所执行的操作。合法的输入包括:
· List
· Create
· Delete
· Rename
缺省值为List.
DIRECTORY
要对之执行目录操作的目录名。
NAME
目录列表输出的查询名。ACTION=”List”时要指定此属性,其他操作忽略此属性。
FILTER
用于过滤返回的文件名,如”*.cfm”。ACTION=”List”时可指定此属性,其他操作忽
略此属性。
MODE
可选。只在Solaris中,在ACTION=”Create”时使用,用于设置一个目录的许可权限。
在Windows中将被忽略。
其合法取值对应于UNIX的chmod命令的十进制值。许可权限按照“所有者,组,其它”
的顺序分别设置。例如:
MODE=644
赋予所有者读/写权限,组和其它用户被赋予读权限。
SORT
ACTION=”List”时可选,对其它操作被忽略。可用此属性指定一列字段名,相互间用
逗号隔开,根据这些字段对输出的目录列表进行排序。对每个字段可指定ASC或DESC,
按升序或降序排序。例如:
SORT=”colname
ASC,filename2 DESC,size,datelastmodified”
NEWDIRECTORY
DIRECTORY属性中指定的目录的新目录名。ACTION=”Rename”时要指定此属性,其它操
作忽略该属性。
返回文件信息(ACTION=“LIST”)
当ACTION=“LIST”时,CFDIRECTORY返回五个变量,你可以在CFOUTPUT中引用这些变量:
· Name——目录名或文件名。
· Size——目录大小或文件大小。
· Type——文件类型:F代表文件,D代表目录。
· DateLastModified——最后一次被
修改的时间。
· Attributes——文件属性。
· Mode——(仅Solaris支持)代表指定目录的权限设置的十进制数。
例子
你可以在CFML扩展中使用查询结果字段,只需以查询名作为字段名的前缀。
<CFDIRECTORY
DIRECTORY="c:/winnt/system32"
NAME="mydirectory"
SORT="size ASC, name DESC, datelastmodified">
<CFOUTPUT QUERY=”mydirectory”>
Name: #mydirectory.name# <BR>
Size: #mydirectory.size# <BR>Type: #mydirectory.type# <BR>
Date last modified: #mydirectory.datelastmodified# <BR>
Attributes: #mydirectory.attributes#<BR>
Mode: #mydirectory.mode#<BR>
</CFOUTPUT>

建立连接
CFFTP标签使你能够通过文件传输协议(ftp)与远程服务器相交互。这是服务器与服务
器之间的文件操作。要实现服务器与浏览器之间的文件操作,应使用CFFILE,
CFCONTENT和CFDIRECTORY标签。
建立连接
CFFTP的使用涉及两种类型的操作,建立连接和传输文件。
注意:CFFTP是一个COM对象,Microsoft Windows NT 3.51不支持此对象。
例子:FTP登录
下面的例子演示了一个打开的FTP连接,并提供了用户名和密码。
<CFFTP
CONNECTION=FTP
USERNAME="betauser"
PASSword="monroe"
SERVER="beta.company.com"
ACTION="Open"
STOPONERROR="No">
CFFTP标签要求指定USERNAME和PASSword属性,为此当建立匿名连接时,要以
“anonymous”作为用户名,以一个email地址作为密码。


文件和目录操作
建立连接之后,你就可以与所连接的FTP服务器进行交互,执行文件和目录操作。实现
文件和目录操作的CFFTP标签的各属性如下表所列:
CFFPT文件和目录操作属性
属性
描述
ACTION
如果连接没有被缓冲,则需要此属性,否则不需要。
指明要执行的FTP操作,这些操作可以是下列之一:
· ChangeDir
· CreateDir
· ListDir
· GetFile
· PutFile
· Rename
· Remove
· GetCurrentDir
· GetCurrentURL
· ExistsDir
· ExistsFile
· Exists
注意:文件名和目录名是区分大小写的。例如,对test.log执行ListDir操作不会找到
test.LOG。
USERNAME
用于建立FTP连接的用户名。如果连接已经被缓冲,则不需要此属性。
PASSword
用于建立连接的密码。如果连接已经被缓冲,则不需要此属性。
NAME
当ACTION=”ListDir”时需要此属性,用于指定用来保存目录列表的查询名。
SERVER
要与之建立连接的服务器名。如果连接已经被缓冲,则不需要此属性。
TIMEOUT
可选。用于指定所有操作的超时秒数。缺省值是30秒。
PORT
可选。用于指定远程服务器的端口号。
CONNECTION
可选。指定FTP连接的名字,用于缓冲当前的FTP连接或重用已缓冲的FTP连接。所有使
用相同连接名的CFFTP都使用相同的连接信息。
ASCIIEXTENSIONLIST
可选。一列用分号隔开的文件扩展名,用于在TRANSFERMODE=”Autodetect”时强制进
行ASCII传输模式。缺省的扩展名列表是:
txt;htm;HTML;cfm;cfml;shtm;sHTML;CSS;ASP;asa
TRANSFERMODE
可选。指定你要用的FTP传输模式。合法的输入有ASCII,Binary,或Autodetect。缺省值
是Autodect.
AGENTNAME
可选。管理传输的应用程序。
FAILIFEXISTS
可选。其值为Yes或NO,缺省为Yes。用于指明当同名的文件已经存在时,GetFile操作
是否失败。
DIRECTORY
当ACTION=ChangeDir,CreateDir,ListDir,ExistsDir时需要此属性。用于指定要对之进
行操作的目录。
LOCALFILE
当ACTION=GetFile,PutFile时需要此属性。用于指定用户本地文件系统中的文件名。
REMOTEFILE
当ACTION=GetFile,PutFile,ExistsFile时需要此属性。用于指定FTP服务器上文件系统
中的文件名。
ATTRIBUTES
可选。一列用逗号隔开的文件属性。缺省值为”Normal”。用于在GetFile操作中指定
本地文件的文件属性。其值可以是下列值的任意组合:
· ReadOnly
· Hidden
· System
· Archive
· Directory
· Compressed
· Temporary
· Normal
ITEM
当ACTION=Exists,Remove时需要此属性。用于指定这些操作的对象,文件或目录。
EXISTING
当ACTION=Rename时需要此属性。指定远程服务器上文件或目录的当前名字。
NEW
当ACTION=Rename时需要此属性。指定远程服务器上文件或目录的新名字。
RETRYCOUNT
可选。报错之前的重试次数。缺省值是1。
STOPONERROR
可选。其值为Yes或No,缺省值为NO。当为Yes时,停止所有的处理并显示合适的错误信
息;当为No时,产生三个变量:
· CFFTP.Succeeded---Yes 或NO.
· CFFTP.ErrorCode---错误号。
· CFFTP.ErrorText---解释错误情况的错误信息。
 

连接缓存
一旦用CFFTP建立了一个连接,你可以再次使用该连接,执行附加的FTP操作。要实现这
一点,在第一次建立连接时要用CONECTION属性定义并命名一个FTP连接对象。此对象用
于保存与连接有关的信息,任何附加的FTP操作只要使用相同的CONECTION名字,即可自
动使用存储在连接对象中的信息。这项特性节省了连接和登录到FTP服务器的时间,从
而提高了文件传输操作的效率。
当你使用一个FTP连接时,你不需要重新指定下列属性:
· USERNAME
· PASSword
· SERVER
在这种情况下,如果使用了框架(frame),则你应确保当多个请求同时到达时,只有
一个框架将使用连接对象。
跨多个文件的连接缓存
CFFTP缓存只能维持在当前的网页中,除非你显式地将一个CFFTP连接分配给一个应用程
序范围或session范围的变量。将一个CFFTP连接分配给一个Application变量对象有可
能会出现问题,因为有可能会有多个用户同时访问同一个连接对象。为CFFTP连接创建
一个Session变量是比较合适的。
将FTP连接名分配给一个session变量即可实现session范围内的连接缓存。如下例所示:
<CFFTP ACTION=connect
USERNAME="anonymous"
PASSword="me@home.com"
SERVER="ftp.eclipse.com"
CONNECTION="Session.myconnection">
在这个例子中,连接缓存在当前Session的所有程序文件中有效。当然,你首先应确保
你的应用程序允许了Session变量。
注意:要修改一个缓存的连接,例如改变RETRYCOUNT或TIMEOUT的值,则必须重新建立
该连接。
连接缓存的操作和属性
下表显示了使用连接缓存进行各种操作所需的CFFTP属性,如果没有使用连接缓存,则
还需指定USERNAME,
PASSword和SERVER属性。
CFFTP各操作所需的属性
操作
属性
操作
属性
Open

Rename
EXISTING
NEW
Close

Remove
SERVER
ITEM
ChangeDir
DIRECTORY
GetCurrentDir

CreateDir
DIRECTORY
GetCurrentURL

ListDir
NAME
DIRECTORY
ExistsDir
DIRECTORY
GetFile
LOCALFILE
REMOTEFILE
ExistsFile
REMOTEFILE
PutFile
LOCALFILE
REMOTEFILE
Exists
ITEM
例子:一个FTP Session
下面的例子打开一个FTP连接,获取文件列表,显示文件或目录的名字,路径,URL,长
度,以及修改日期。例中使用了连接缓存,并允许了自动检测错误。
<--- open FTP connection --->
<CFFTP CONNECTION=FTP
USERNAME="betauser"
PASSword="monroe"
SERVER="beta.company.com"
ACTION="Open"
STOPONERROR="Yes">
<--- get current directory name --->
<CFFTP CONNECTION=FTP
ACTION="GetCurrentDir"
STOPONERROR="Yes">
<--- output directory name --->
<CFOUTPUT>
FTP directory listing of #cfftp.returnvalue#.<p>
</CFOUTPUT>
<--- get directory info --->
<CFFTP CONNECTION=FTP
ACTION="listdir"
DIRECTORY="/*."
NAME="q"
STOPONERROR="Yes">
<--- output dir-list results --->
<HR>
<P>FTP Directory Listing:</P>
<CFTABLE QUERY="q" HTMLTABLE>
<CFCOL HEADER="<B>Name</B>"
TEXT="#name#">
<CFCOL HEADER="<B>Path</B>"
TEXT="#path#">
<CFCOL HEADER="<B>URL</B>"
TEXT="#url#">
<CFCOL HEADER="<B>Length</B>"
TEXT="#length#">
<CFCOL HEADER="<B>LastModified</B>"
TEXT="Date(Format#lastmodified#)">
<CFCOL HEADER="<B>IsDirectory</B>"
TEXT="#isdirectory#">
</CFTABLE>



     CFFTP变量
CFFTP操作返回下列变量:
    ·
CFFTPResult.ReturnValue
    ·
当ACTION属性为“ListDir”时,返回CFFTP查询对象。
    ·
当STOPONERROR属性值为“NO”时,创建三个变量。
CFFTPResult.ReturnValue
    变量CFFTPResult.ReturnValue的值决定于CFFTP的ACTION属性。
CFFTPResult.ReturnValue
CFFTP ACTION
CFFTPResult.ReturnValue变量的值
GetCurrentDir
当前目录的字符串值
GetCurrentURL
当前URL的字符串值
ExistsDir
Yes或No
ExistsFile
Yes或No
Exists
Yes或No
STOPONERROR变量
    当STOPONERROR属性被设置为“NO”时,将创建如下的变量:
    ·
CFFTP.Succeeded——Yes或NO
    ·
CFFTP.ErrorCode——错误码(参见下面的CFFTP.Errorcode值)
    ·
CFFTP.ErrorText——解释错误情况的文本信息。
下表列出了CFFTP.ErrorCode变量的可能值:
CFFTP.ErrorCode变量的值
错误码
描述
0
操作成功
1
系统错误
2
无法建立Internet会话
3
无法打开FTP会话
4
无法识别文件传输模式
5
无法建立搜索连接
6
被调用的操作只有在搜索时才合法
7
非法的超时值
8
非法的端口号
9
没有足够的内存
10
本地文件不可读取
11
本地文件不可写入
12
无法打开远程文件
13
无法读取远程文件
14
无法打开本地文件
15
不能写入远程文件
16
未知错误
17
保留
18
文件已经存在
19
保留
20
保留
21
非法的重试次数
CFFTP查询对象的属性
    当你使用CFFTP的ListDir操作时,你必须指定NAME属性的值。NAME属性的值用于将
ListDir操作的查询结果保存在一个查询对象中。这个查询对象的各个字段可以用如下
的格式来引用:
    queryname Columnname[row]
    其中queryname即是在NAME属性中指定的查询名,Columnname是返回到查询对象中
的各字段之一,Row是由ListDir操作所返回的每个文件/目录项的行号,每个文件或子
目录都占用单独的一行。
    下表列出了查询对象中的各个字段。
CFFTP查询对象字段
字段
描述
Name
当前元素的文件名
Path
当前元素的文件路径(不包括盘符)
URL
当前元素(文件或目录)的完整URL
Length
当前元素的文件大小
LastModified
当前元素的未格式化的日期/时间
Attributes
当前元素的属性
Isdirectory
布尔值,指明当前元素是文件还是目录


使用CFHTTP与Web相交互
CFHTTP标签是功能最强大的CFML标签之一,它可以用来:
·
从网络上获取网页和查询结果。
· 向远程服务器,CFML模板或CGI应用程序传送数据并处理返回数据。
超文本传输协议(HTTP)处理Web服务器之间的各种通信。执行一个事务处理所采取的
方法决定了服务器处理什么以及什么内容被传送给浏览器。除了HTML文档之外,HTTP还
支持二进制文件,图象、音频和视频等内容类型。HTTP协议标准规定,用户的请求信息
和服务器的响应信息,以及事务处理的状态信息均以请求标题和响应标题的形式被传递。
HTTP协议有几种通信方法,用于在客户和服务器之间交换信息。CFHTTP标签实现了最常
用的HTTP通信方法:GET和POST.
CFHTTP的语法非常简单,但它提供了许多选项,用于指定输出,处理链接以及建立查询
等任务。



CFHTTP的语法
CFHTTP 标签的基本语法如下:
<CFHTTP URL=" hostname"
USERNAME=" username"
PASSword=" password"
NAME=" queryname"
COLUMNS=" query_columns"
PATH=" path"
FILE=" filename"
METHOD=" get_or_post"
DELIMITER=" character"
TEXTQUALIFIER=" character"
RESOLVEURL=" Yes/No"
PROXYSERVER=" hostname">
</CFHTTP>
处理所获网页中的链接
要保持通过CFHTTP从Web服务器获取的网页中的相对链接,应将RESOLVEURL属性设为
“Yes”。当RESOLVEURL=YES时,下列可能包含链接的标签会被处理:
· IMG SRC
· A HREF
· RORM ACTION
· APPLET CODE
· SCRIPT SRC
· EMBED SRC
· EMBED PLUGINSPACE
· BODY BACKGROUND
· FRAME SRC
· BGSOUND SRC
· OBJECT DATA
· OBJECT CLASSID
· OBJECT C0DEBASE
· OBJECT USEMAP
注意:如果获取的网页中某个URL指向一个二进制文件,则该网页不被显示。你可以输
入一个路径作为PATH属性的值,从而把该二进制文件保存到本地计算机中。



使用CFHTTP的Get方法
Get方法于从指定的服务器获取文本文件或二进制文件。下面的几个例子演示了几种常
用的Get操作。Get方法是一种单向的事务处理方法,CFHTTP用这种方法获得一个对象,
而Post方法是双向的处理方法,CFHTTP用Post方法向ColdFusion文件或CGI程序传递变
量,并接收和处理返回的数据。
例子:获取到变量中
下面的例子用Get方法请求Yahoo站点的缺省主页,并将文件内容保存到一个变量中,然
后用CFOUTPUT将该变量的内容显示在浏览器中。
<CFHTTP METHOD="Get"
URL="http://www.yahoo.com/index.htm"
RESOLVEURL="Yes">
<CFOUTPUT>
#CFHTTP.FileContent# <BR>
</CFOUTPUT>
当FILE属性和PATH属性被忽略时,ColdFusion将文件index.htm的内容保存到变量
CFHTTP.FileContent中。要注意的是,若不把RESOLVEURL属性设为“Yes”,则下载的
网页中相对链接会被打断。若将该属性设为“Yes”,则相对链接会被转换为绝对链接。
例子:获取到一个文件中
下面的例子也用Get方法执行一个简单的文件请求,但PATH属性和FILE属性的使用导致
下载的文件被保存到本地的文件中。
<CFHTTP METHOD = "get"
URL="http://www.yahoo.com/index.htm"
PATH="c:/temp"
FILE="yahooindex.htm">
注意,当使用了PATH属性和FILE属性时,RESOLVEURL属性会被忽略(即使指定了该属性,
也将被忽略)。
例子:获取一个二进制文件
与上一个例子相似,这个例子也从服务器下载一个文件并保存到PATH属性和FILE属性所
指定的位置。唯一的不同是被下载文件的MIME类型不一样。
<CFHTTP METHOD="Get"
URL="http://maximus/downloads/quakestuff/q2_test.zip"
PATH="c:/quake2/install"
FILE="quake2beta.zip">
<CFOUTPUT>
#CFHTTP.MimeType#
</CFOUTPUT>
CFOUTPUT代码块显示了被下载文件的MIME类型,在此例中是application/zip。


根据一个文本文件建立查询
使用CFHTTP的Get方法,你可以根据一个有分隔符的文本文件创建查询对象。这是处理
生成的文本文件的一个有力方法。一旦查询对象创建之后,对查询字段的引用和处理是
非常简单的。
文本文件的处理方式如下:
· 用DELIMITER属性指定一个分隔符。如果某个字段的数据包含分隔符本身,则
必须将其括在引号中或括在某个其它字符中,你可以用TEXTQUALIFIER属性指定该字符。
·
缺省情况下,文本文件的第一行被解释为字段标题文本。你可以在COLUMNS属性中指定
替代的标题文本。如果这样,你应确保为文本文件的每一列都指定了替代的标题文本。
·
当遇到重复的字段标题时,ColdFusion为重复的字段名添加一个下划线字符。例如,如
果发现两个字段标题都是CustomerID,则第二个字段标题被更名为“CustomerID_”。
例子:根据一个文本文件创建查询
这个例子根据一个以逗号为分隔符的文本文件创建一个查询对象。该文本文件有六列数
据,互相以逗号分隔,文件的第一行为:
OrderID,OrderNum,OrderDate,ShipDate,ShipName,ShipAddress
这个例子接受文本文件的第一行作为字段名:
<CFHTTP METHOD="Get"
URL="http://127.0.0.1/orders/june/orders.txt"
NAME="juneorders"
DELIMITER=","
TEXTQUALIFIER="""">
<CFOUTPUT QUERY="juneorders">
OrderID: #OrderID#<BR>
Order Number: #OrderNum#<BR>
Order Date: #OrderDate#<BR>
</CFOUTPUT>
你可用COLUMNS属性指定不同与上例的字段名:
<CFHTTP METHOD="Get"
URL="http://127.0.0.1/orders/june/orders.txt"
NAME="juneorders"
COLUMNS="ID, Number,Date"
DELIMITER=","
TEXTQUALIFIER="""">
<CFOUTPUT QUERY="juneorders">
Order ID: #ID#<BR>
Order Number: #Number#<BR>
Order Date: #Date#<BR>
</CFOUTPUT>



使用CFTTP的Post方法
Post方法用于向指定的ColdFusion文件或CGI程序发送Cookie变量,form变量,CGI变量,
URL变量以及文件变量。使用Post方法时,必须对每个要发送的变量使用CFHTTPPARAM标
签。与Get方法不同,Post方法将数据传送给ColdFusion文件或其它可执行文件,该文
件对传送的变量进行处理并有数据返回。
例如,当你建立一个使用Post方法的HTML表单时,你要指定将form数据传递给哪个程序
文件。在CFHTTP中使用Post方法与此相同。
例子:将变量传递给ColdFusion文件
下面的例子向URL属性所指定的文件传递五种类型的变量。该文件返回各变量的值并显
示在浏览器中。这个例子在接受Post数据的文件中用CFFILE标签将文件变量的内容上载
到C:/temp/junk目录下。
注意:文件Posttest.cfm中的CFOUTPUT引用了变量CFHTTP.Filecontent,用于显示
Server.cfm文件的输出。如果不使用CFHTTP.Filecontent变量,浏览器的输出显示将只
限于Posttest.cfm的内容。
例子文件: posttest.cfm
<CFHTTP METHOD="Post"
URL="http://housebeat/cfdocs/server.cfm"
USERNAME="user1"
PASSword="user1pwd">
<CFHTTPPARAM TYPE="Cookie"
VALUE="cookiemonster"
NAME="mycookie6">
<CFHTTPPARAM TYPE="CGI"
VALUE="CGIvar "
NAME="myCGI">
<CFHTTPPARAM TYPE="URL"
VALUE="theurl"
NAME="myurl">
<CFHTTPPARAM TYPE="Formfield"
VALUE="wbfreuh@allaire.com"
NAME="emailaddress">
<CFHTTPPARAM TYPE="File"
NAME="myfile"
FILE="c:/temp/cyberLOGO.gif">
</CFHTTP>
<CFOUTPUT>
#CFHTTP.filecontent#
#CFHTTP.mimetype#
</CFOUTPUT>
例子文件: server.cfm
You have POSTed to me.<BR>
<CFFILE DESTINATION="c:/temp/junk"
NAMECONFLICT="Overwrite"
FILEFIELD="myfile"
ACTION="Upload"
ATTRIBUTES="Normal">
<CFOUTPUT>
The URL variable is: #url.myurl# <BR>
The Cookie variable is: #cookie.mycookie6# <BR>
The CGI variable is: #CGI.myCGI#. <BR>
The Formfield variable is: #form.myformfield#. <BR>
</CFOUTPUT>
例子:CGI程序的返回结果
下面的例子运行一个CGI程序Search.exe,该程序搜索一个站点,返回VALUE属性所指定
的值的命中次数。
<CFHTTP METHOD="Post"
URL="http://www.thatsite.com/search.exe"
RESOLVEURL="Yes">
<CFHTTPPARAM TYPE="Formfield"
NAME="search"
VALUE="hello">
</CFHTTP>
<CFOUTPUT>
#CFHTTP.MimeType#<BR>
Length: #len(cfhttp.filecontent)# <BR>
Content: #HTMLcodeformat(cfhttp.filecontent)#<BR>
</CFOUTPUT>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值