1

我试图将上传失败的文件名放入电子邮件中,在 try/catch 中,但我没有任何运气。

基于这个文档 - FileUploadAll() - 我决定我要使用错误。

<cftry>
    <cffile destination="#FULLPATH#" action="upload" nameconflict="ERROR" continueOnError="true" filefield="FileName" />
    <cfcatch type="Any" >
        <cf_EmailHandler from="testmail@gmail.com" to="testmail@gmail.com" subject="Attachment Error - #BUILD_SEARCH.PROJECT_VERSION# #BUILD_SEARCH.BUILD_NUMBER#">
            <CFOUTPUT>
                Attachment Error - #BUILD_SEARCH.PROJECT_VERSION# #BUILD_SEARCH.BUILD_NUMBER#
                Cannot upload the following file:
                #FULLPATH# #ArrayLen(cffile.uploadAllErrors)#
            </CFOUTPUT>
        </cf_EmailHandler>
        <b>Error:</b>File already exists.
        <cfabort>
    </cfcatch>
</cftry>

我收到以下错误:

CFFILE 中未定义元素 UPLOADALLERRORS

所以我尝试解决这个问题:

<cftry>
    <cffile destination="#FULLPATH#" action="upload" nameconflict="ERROR" Errors="errorResult" continueOnError="true" filefield="FileName" />
    <cfcatch type="Any" >
        <cf_EmailHandler from="testmail@gmail.com" to="testmail@gmail.com" subject="Attachment Error - #BUILD_SEARCH.PROJECT_VERSION# #BUILD_SEARCH.BUILD_NUMBER#">
            <CFOUTPUT>
                Attachment Error - #BUILD_SEARCH.PROJECT_VERSION# #BUILD_SEARCH.BUILD_NUMBER#
                Cannot upload the following file:
                #FULLPATH# #ArrayLen(errorResult.uploadAllErrors)#
            </CFOUTPUT>
        </cf_EmailHandler>
        <b>Error:</b>File already exists.
        <cfabort>
    </cfcatch>
</cftry>

然后我得到:

元素 UPLOADALLERRORS 在 ERRORRESULT 中未定义。

关于我做错了什么或以其他方式显示上传失败的名称的任何想法?我也在使用 ColdFusion 11。

4

2 回答 2

1

更新:

错误报告CF-4204290当前将此问题列为“待修复”。

TL;博士;

这是一个文档错误。action=uploadcontinueOnError不支持该属性。请改用action=uploadAll。请记住,“uploadAll”支持多个文件,因此结果将作为结构数组返回。


它不起作用的原因是代码使用了错误的“动作”。它应该是action="uploadAll"。由于您使用的是continueOnError="true",因此 CF 会使用发生的任何错误填充结构。默认情况下它使用,但您可以使用该属性CFFILE指定不同的变量名称。errors

<cffile destination="c:/some/path/" 
    action="uploadAll" 
    nameconflict="ERROR" 
    continueOnError="true" 
    filefield="file_path" />

更新:

正如评论中所指出的,文档确实continueOnErroraction=upload的受支持属性。但是,IMO 这是一个文档错误。Adobe 可能只是从 action=uploadAll 描述中复制了文本。

有趣的是,FileUpload()的文档根本没有列出该属性。错误报告 CF-4199503确认功能版本不支持它。根据我在下面对 CF11 和 CF2016 的测试,我得出结论,这两个版本都不支持。


测试操作=UploadAll

上传目标目录中已存在的文件不会导致硬错误。CF 使用错误详细信息填充指定变量并将它们转储到屏幕上:

<cfif structKeyExists(FORM, "submit")>
    <cffile destination="c:/temp" 
        action="uploadAll" 
        nameconflict="ERROR" 
        continueOnError="true" 
        errors="myErrors"
        filefield="file_path" />

    <cfdump var="#cffile#" label="cffile">
    <cfdump var="#myErrors#" label="errors">
</cfif>

<form  method="POST" 
    enctype="multipart/form-data">
    <input type="file" name="file_path">
    <input type="submit" name="test">
</form>

结果: Action UploadAll结果截图

测试操作=上传

将操作更改为action="upload",代码失败。ColdFusion 不会:

  • 错误后继续处理..或
  • 填充cffile错误信息...或
  • 创建一个由errors属性命名的结果变量

结果:

动作上传结果截图

请注意,省略可选errors属性会产生相同的结果。使用 action=uploadAll 时它按预期工作,使用 action=upload 时失败并出现错误

于 2019-05-04T02:36:19.227 回答
0

在表单页面中,我使用 JavaScript 捕获了文件名

<Input Name="FileName" type="file" size="#TEXT_AREA_WIDTH#"><br><br>
<Input type="Hidden" id="READ_FILE_NAME" name="READ_FILE_NAME" value="">
<Input type="Submit" name="Operation" value="Save" onclick="return validateAttachmentForm(this.form.FileName.value)">&nbsp;

function validateAttachmentForm(file_name)
{
  if (file_name.lastIndexOf("\\" != -1)) {
    var file_name = file_name.substring(file_name.lastIndexOf("\\") + 1, file_name.length);
  }

  document.getElementById("READ_FILE_NAME").value = file_name;

  if(file_name != "")
  {
    return true;
  } else{

    alert('Please select a file to upload.')
    return false;
  } 
}

在下一页中,我只是显示传入的 filname

<cftry>
    <cffile destination="#FULLPATH#" action="upload" nameconflict="ERROR" Errors="errorResult" continueOnError="true" filefield="FileName" />
    <cfcatch type="Any" >
        <cf_EmailHandler from="testmail@gmail.com" to="testmail@gmail.com" subject="Attachment Error - #BUILD_SEARCH.PROJECT_VERSION# #BUILD_SEARCH.BUILD_NUMBER#">
            <CFOUTPUT>
                Attachment Error - #BUILD_SEARCH.PROJECT_VERSION# #BUILD_SEARCH.BUILD_NUMBER#
                Cannot upload the following file:
                #FULLPATH#\#form.READ_FILE_NAME#
            </CFOUTPUT>
        </cf_EmailHandler>
        <b>Error:</b>File already exists.
        <cfabort>
    </cfcatch>
</cftry>
于 2019-05-03T21:05:58.283 回答