CFFILE - загрузка файла с использованием компонента - PullRequest
3 голосов
/ 21 октября 2011

У меня есть форма, которую я хотел бы отправить компоненту для обработки (поведение 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>

Следует отметить, что если я попытаюсь использовать переменную 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. 

Есть идеи, как решить эту проблему? Я бы предпочел, чтобы все мои действия по обработке выполнялись внутри компонента, но сейчас я не могу заставить это работать.

Спасибо! Будет

1 Ответ

6 голосов
/ 21 октября 2011

Вам не нужно использовать полное имя переменной при использовании тега cffile - вам просто нужно имя поля формы, поэтому что-то вроде:

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

должно хватить. Поле структуры FORM содержит местоположение временного файла, но тегу cffile это не нужно (я бы хотел, чтобы идентификатор, который напрямую обращается к структуре FORM в бэкэнде, на основе предоставленного вами имени поля).

...