无法访问cffile.clientDirectory

时间:2013-05-20 03:12:29

标签: coldfusion coldfusion-10 cffile

我是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信息......?

3 个答案:

答案 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" ...>

我看到一些问题:

  1. 您指定了“结果”名称,因此文件属性将放置在名为uploadResult的变量中,而不是cffile

  2. <cffile action="uploadAll">旨在处理多个文件。因此它返回文件属性的数组,而不仅仅是单个结构。因此,您必须遍历数组才能访问每个文件的属性。

  3. 实际属性的名称为clientDirectory,而不是clientFileDirectory

  4. 但是,那说 ..客户端上文件的位置通常是不相关的。在大多数Web应用程序中,您只关心服务器上的上传文件的名称和位置,因此您可以在以后查看/下载它。所以我怀疑你可能打算使用serverXXX变量?即

       <cfloop array="#uploadResult#" index="fileProp">
            serverFile: <cfdump var="#fileProp.serverFile#">
            serverDirectory: <cfdump var="#fileProp.serverDirectory#">
       </cfloop>
    
      

    我想在上传

    之前获取元数据

    上传文件后<cffile action="uploadAll">代码执行。它真正做的就是移动并重命名文件。因此从技术上讲,您无法在上传之前获取之前的信息 - 仅在之后。