我是ColdFusion的新手。我正在使用ColdFusion 10.我正在尝试使用cffileupload
上传多个图像文件。我可以按预期上传文件。但我想在上传之前获取元数据并获取上传文件的clientFileDirectory
。 PFB代码
fileupload.cfm
<cffileupload
name = "uploadDemo"
url="uploadSelectedFiles.cfm"
progressbar="true"
addButtonLabel = "Select File(s)"
clearButtonLabel = "Clear"
width="500"
height="400"
title="Choose Files To Upload"
maxUploadSize="1"
maxFileSelect="10"
extensionfilter="*.gif,*.jpg,*.png,*.doc"
uploadButtonLabel="Upload"
onComplete="previewfile"
>
uploadSelectedFiles.cfm
<cffile action="uploadall"
destination="#expandpath('.')#"
nameconflict="makeUnique"
result="uploadResult"
/>
<cfoutput>try</cfoutput>
<cfdump var="#cffile#">
但是cffile.clientDirectory
会抛出一个状态代码:500(无法上传文件......)。还有一件事,我无法在主页面(文件上传页面)中查看“try”字符串输出。
已编辑:添加更多信息
非常感谢您的回复。
我正在寻找cffile.clientDirectory(uploadResults.clientDirectory)信息,但无法获取它。请帮助....我急需这些信息。我没有为任何上传的文件获取它。 PFB我的试验。
我试过
<cfdump var="#uploadResult#" label="Upload Meta Data" output="#expandPath( './log.txt' )#" format="text" />
并且日志可用。
log.txt的
Upload Meta Data - array - Top 1 of 1 rows
1) [struct]
ATTEMPTEDSERVERFILE: cat.jpg
CLIENTDIRECTORY: [empty string]
CLIENTFILE: cat.jpg
CLIENTFILEEXT: jpg
CLIENTFILENAME: cat
CONTENTSUBTYPE: octet-stream
CONTENTTYPE: application
DATELASTACCESSED: {d '2013-05-20'}
FILEEXISTED: YES
FILESIZE: 446759
FILEWASAPPENDED: NO
FILEWASOVERWRITTEN: YES
FILEWASRENAMED: NO
FILEWASSAVED: YES
OLDFILESIZE: 446759
SERVERDIRECTORY: E:\Inetpub\wwwroot\cdd\Portfolio\eKris
SERVERFILE: cat.jpg
SERVERFILEEXT: jpg
SERVERFILENAME: cat
TIMECREATED: {ts '2013-05-20 17:35:57'}
TIMELASTMODIFIED: {ts '2013-05-20 17:35:57'}
你能帮助我获取clientDirectory信息......?
答案 0 :(得分:1)
正如@Leigh所提到的,通常您只关心服务器上上传文件的名称和位置。客户端计算机上的目录无关紧要。此外,我相信返回的空字段是由于现代浏览器的增强安全性。从客户机器中公开该信息将被视为安全漏洞。我假设Adobe仅保留此功能以实现向后兼容。
我找到了三个旧帖子,讨论与cffile.clientDirectory
字段的结果不一致。他们都碰巧从2008年回来。他们都提到每个浏览器的行为都不同。他们都提到只有Internet Explorer会返回cffile.clientDirectory
字段中的任何内容。这些帖子提到他们正在使用Internet Explorer 7.即使在当时(根据其中一篇文章),当前版本的Firefox,Netscape和Safari都没有返回这些信息,我也不相信Chrome已经存在。我得出结论,微软最终赶上了其他浏览器,不再提供这些信息。
以下是我提到的三篇帖子:
答案 1 :(得分:0)
<cfif structKeyExists(form,"submit")> <br/>
<cffile action="uploadall" destination="#expandpath('./upload')#">
</cfif> <br/>
<cfform action="#cgi.script_name#" enctype="multipart/form-data"> <br/>
<cfinput type="file" name="attachment1"> <br/><br>
<cfinput type="file" name="attachment2"> <br/><br>
<cfinput type="file" name="attachment3"> <br/><br>
<cfinput type="submit" name=" submit" value="submit"> <br/>
</cfform>
请检查一下。
答案 2 :(得分:0)
获取上传文件的clientFileDirectory
<cffile action="uploadall" result="uploadResult" ...>
我看到一些问题:
您指定了“结果”名称,因此文件属性将放置在名为uploadResult
的变量中,而不是cffile
。
<cffile action="uploadAll">
旨在处理多个文件。因此它返回文件属性的数组,而不仅仅是单个结构。因此,您必须遍历数组才能访问每个文件的属性。
实际属性的名称为clientDirectory
,而不是clientFileDirectory
。
但是,那说 ..客户端上文件的位置通常是不相关的。在大多数Web应用程序中,您只关心服务器上的上传文件的名称和位置,因此您可以在以后查看/下载它。所以我怀疑你可能打算使用serverXXX
变量?即
<cfloop array="#uploadResult#" index="fileProp">
serverFile: <cfdump var="#fileProp.serverFile#">
serverDirectory: <cfdump var="#fileProp.serverDirectory#">
</cfloop>
我想在上传
之前获取元数据
上传文件后<cffile action="uploadAll">
代码执行。它真正做的就是移动并重命名文件。因此从技术上讲,您无法在上传之前获取之前的信息 - 仅在之后。