3

処理のためにコンポーネントに送信したいフォームがあります(CRUDの動作)。問題は、multipart/form-dataをコンポーネントに渡すとファイルの場所が失われるように見えることです。ファイルをアップロードする必要があるコンポーネントの部分に到達すると、悪名高いフォームフィールドにファイルエラーが含まれていませんでした。

なぜこれが発生するのか100%わかりませんが、アクションを実行する.cfmページにフォームを直接送信すると、cffileすべてが期待どおりに機能しますが、.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>

注意すべきことの1つは、変数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" ...>

十分なはずです。構造体フィールドは一時ファイルのFORM場所を保持しますが、cffileタグはそれを必要としません(指定FORMしたフィールド名に基づいて、idがバックエンドの構造体に直接アクセスすることをイメージします)。

于 2011-10-21T16:39:23.577 に答える