0

我是 ColdFusion 的新手。我正在使用 ColdFusion 10。我正在尝试使用cffileupload. 我能够按预期上传文件。但我想在上传之前获取元数据并获取clientFileDirectory上传文件的。PFB 代码

文件上传.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"
    >

上传选定文件.cfm

<cffile action="uploadall" 
    destination="#expandpath('.')#"  
    nameconflict="makeUnique" 
    result="uploadResult" 
    />
<cfoutput>try</cfoutput>
<cfdump var="#cffile#">

cffile.clientDirectory抛出一个状态码:500(也无法上传文件......)。还有一件事,我无法在主页(文件上传页面)中查看“尝试”字符串输出。

已编辑:添加了更多信息

非常感谢你的回复。

我正在寻找 cffile.clientDirectory (uploadResults.clientDirectory) 信息,但无法获得它。请帮助....我急需该信息。我没有收到任何上传的文件。PFB我的试验。

我试过了

<cfdump    var="#uploadResult#"    label="Upload Meta Data"    output="#expandPath( './log.txt' )#"    format="text"    />

并且日志可用。

日志.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信息吗...?

4

3 回答 3

1

正如@Leigh 提到的,通常您只关心服务器上上传文件的名称和位置。客户端机器上的目录无关紧要。此外,我相信返回的空白字段是由于现代浏览器增强了安全性。从客户的机器上暴露该信息将被视为安全漏洞。我认为 Adob​​e 仅保留此功能是为了向后兼容。

我发现三个旧帖子讨论了与该cffile.clientDirectory领域的结果不一致。他们都恰好是从 2008 年回来的。他们都提到每个浏览器的行为都不同。他们都提到只有 Internet Explorer 会返回该cffile.clientDirectory字段中的任何内容。这些帖子提到他们使用的是 Internet Explorer 7。即使在那时(根据其中一篇帖子),当前版本的 Firefox、Netscape 和 Safari 也没有返回此信息,我不相信 Chrome 还存在。我会得出结论,微软终于赶上了其他浏览器,不再提供这些信息。

以下是我提到的三个帖子:

于 2013-05-21T12:56:05.560 回答
0

获取上传文件的clientFileDirectory

<cffile action="uploadall" result="uploadResult" ...>

我看到几个问题:

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

  2. <cffile action="uploadAll">旨在处理多个文件。所以它返回一个文件属性数组,而不仅仅是一个结构。所以你必须遍历数组来访问每个文件的属性。

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

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

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

我想在上传之前获取元数据

<cffile action="uploadAll">代码在文件上传后执行。它真正做的只是移动和重命名文件。所以从技术上讲,您无法在上传之前获得该信息 - 只有在之后。

于 2013-05-20T14:58:51.063 回答
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>

请检查这个。

于 2013-05-20T06:25:50.867 回答