gpt4 book ai didi

forms - 为什么我不能使用结构语法将文件类型的表单字段传递给 CFFUNCTION?

转载 作者:行者123 更新时间:2023-12-02 12:58:55 24 4
gpt4 key购买 nike

我正在尝试将"file"类型的表单字段传递给 CFFUNCTION。参数类型是“任意”。这是我尝试使用的语法(伪代码):

<cfloop from="1" to="5" index="i">
<cfset fieldname = "attachment" & i />

<cfinvoke component="myComponent" method="attachFile">
<cfinvokeargument name="attachment" value="#FORM[fieldname]#" />
</cfinvoke>
</cfloop>

正在完成循环,因为有五个名为“attachment1”、“attachment2”等的表单字段。

这会在函数中引发异常:

coldfusion.tagext.io.FileTag$FormFileNotFoundException: The form field C:\ColdFusion8\...\neotmp25080.tmp did not contain a file.

但是,这种语法确实有效:

<cfloop from="1" to="5" index="i">
<cfinvoke component="myComponent" method="attachFile">
<cfinvokeargument name="attachment" value="FORM.attachment#i#" />
</cfinvoke>
</cfloop>

我不喜欢像第二个示例中那样编写代码。对我来说这似乎是不好的做法。

那么,谁能告诉我如何使用结构语法将文件类型表单字段正确传递给 CFFUNCTION?

最佳答案

在您的第一个代码片段中,值 #FORM[fieldname]#计算结果为上传文件的名称。因此,您将文件名发送到函数,而不是包含文件名的字段的名称。

如果您想坚持使用可能使用的结构符号

<罢工> <cfinvokeargument name="attachment" value="FORM['#fieldname#']" />

<cfinvokeargument name="attachment" value="FORM.#fieldname#" />

相反。我也不认为您的(工作)第二个代码示例有任何问题。

编辑:

看起来好像<cffile>如果使用结构符号传递字段,则无法评估文件字段,因为参数的某些自动评估魔法。经过进一步的调查,我发现仅传递表单字段的名称而不传递表单前缀也可以。

<cfinvokeargument name="attachment" value="#fieldname#" />

文件字段参数记录为字符串,包含不带前缀的表单字段名称。我的最后一种方法对我来说似乎更“正确”。它甚至会进一步隐藏实现。我也不太关心在组件或函数之外编写范围/结构变量/键,然后将其传递到函数中。这应该更好地在函数本身中完成。

关于forms - 为什么我不能使用结构语法将文件类型的表单字段传递给 CFFUNCTION?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2765737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com