我有一个表单,我想提交给一个组件进行处理(CRUD行为),问题是它似乎将multipart / form-data传递给某个组件以某种方式丢失了文件位置。当它到达应该上传文件的组件部分时,我得到臭名昭着的表单字段不包含文件错误。
我不是百分之百确定为什么会发生这种情况,但是如果我将表单直接提交到执行cffile
操作的.cfm页面,一切都按预期工作,但如果.cfm页面执行如下操作:
<cfobject name="process_form" component="processor" />
<cfset result = process_form.upload( form ) />
并且组件“processor”尝试进行上传,我得到表单字段不包含文件。
我的处理器如下:
<cfcomponent name="processor">
<cffunction name="upload" returntype="string">
<cfargument name="form_data" type="struct" />
<cffile action="upload" filefield="#arguments.form_data.file_1#" ...>
[ ... ]
</cffunction>
</cfcomponent>
有一点需要注意的是,如果我尝试使用变量arguments.form_data.file_1
而没有围绕它的#符号,我会收到错误:
The form field arguments.form_data.file_1 did not contain a file.
如果我在变量周围加上#符号:
The form field C:\JRun4\servers\cfusion\SERVER-INF\temp\cfusion-war-tmp\neotmp7350969777287007477.tmp did not contain a file.
有关如何解决此问题的任何想法?我宁愿将所有处理操作放在一个组件中,但是现在我似乎无法做到这一点。
谢谢! 将
答案 0 :(得分:6)
使用cffile
标记时,您不需要使用完整的变量名称 - 您只需要表单字段名称,如下所示:
<cffile action="upload" filefield="file_1" ...>
应该足够了。 FORM
struct字段保存临时文件的位置,但cffile标记不需要(我的图像,id根据你的字段名直接访问后端的FORM
结构)提供)。