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