3

我有一个表单,我想提交给组件进行处理(CRUD 行为),问题是似乎将 multipart/form-data 传递给组件会以某种方式丢失文件位置。当它到达应该上传文件的组件部分时,我得到臭名昭著的表单字段不包含文件错误。

我不是 100% 确定为什么会发生这种情况,但是如果我将表单直接提交到执行cffile操作的 .cfm 页面,一切都会按预期工作,但是如果 .cfm 页面执行以下操作:

<cfobject name="process_form" component="processor" />
<cfset result = process_form.upload( form ) />

并且组件“处理器”尝试进行上传,我得到表单字段不包含文件。

我的处理器看起来像:

    <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. 

关于如何解决这个问题的任何想法?我宁愿将所有处理操作都放在一个组件中,但现在我似乎无法完成这项工作。

谢谢!将要

4

1 回答 1

6

使用标签时,您不需要使用完整的变量名称cffile- 您只需要表单字段名称,例如:

<cffile action="upload" filefield="file_1" ...>

应该足够了。struct 字段保存临时文件的FORM位置,但 cffile 标记不需要它(我会FORM根据您提供的字段名直接访问后端的结构)。

于 2011-10-21T16:39:23.577 回答