我正在尝试将失败上传的文件名放入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>
我收到以下错误:
元素UPLOADALLERRORS在CFFILE中未定义
所以我尝试解决该问题:
<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>
然后我得到:
在ERRORRESULT中未定义元素UPLOADALLERRORS。
关于我做错了什么还是显示失败的上传名称的任何想法?我也在使用ColdFusion11。
答案 0 :(得分:1)
更新:
错误报告CF-4204290当前将此问题列为“要修复”。
TL; DR;
这是一个文档错误。 action=upload不支持continueOnError
属性。请改用action=uploadAll。请记住,“ uploadAll”支持多个文件,因此结果将作为结构的 array 返回。
它不起作用的原因是因为代码使用了错误的“动作”。它应该是 action =“ uploadAll” 。由于您使用的是continueOnError="true"
,因此CF会在结构中填充发生的任何错误。默认情况下,它使用CFFILE
,但是您可以使用errors
属性指定其他变量名。
<cffile destination="c:/some/path/"
action="uploadAll"
nameconflict="ERROR"
continueOnError="true"
filefield="file_path" />
更新:
如评论中所指出,文档{em>确实说continueOnError
是action=upload的受支持属性。但是,IMO是一个文档错误。 Adobe可能只是从action = uploadAll描述中复制了文本。
有趣的是,FileUpload()的文档根本没有列出该属性。 Bug report CF-4199503确认该功能版本不支持该功能。根据下面在CF11和CF2016上进行的测试,我得出结论说两个版本都不支持它。
测试操作=全部上传
上传目标目录中已经存在的文件,不会导致硬错误。 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="upload"
,代码将失败。 ColdFusion不会:
cffile
...或errors
属性命名的结果变量结果:
注意,省略可选的errors
属性会产生相同的结果。使用action = uploadAll时,它按预期工作,而使用action = upload
答案 1 :(得分: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)">
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>