Обновление:
Отчет об ошибке CF-4204290 в настоящее время указывает на эту проблему как «Исправить».
TL; DR;
Это ошибка документации. Атрибут continueOnError
не поддерживается с action = upload . Вместо этого используйте action = uploadAll . Имейте в виду, что uploadAll поддерживает несколько файлов, поэтому результаты будут возвращены в виде массива структур.
Причина, по которой он не работает, заключается в том, что код использует неправильное «действие». Это должно быть action = "uploadAll" . Поскольку вы используете continueOnError="true"
, CF заполняет структуру любыми возникающими ошибками. По умолчанию он использует CFFILE
, но вы можете указать другое имя переменной с помощью атрибута errors
.
<cffile destination="c:/some/path/"
action="uploadAll"
nameconflict="ERROR"
continueOnError="true"
filefield="file_path" />
Обновление:
Как указано в комментариях, документация делает говорит continueOnError
является поддерживаемым атрибутом для action = upload . Тем не менее, IMO это ошибка документации. Adobe, вероятно, просто скопировал текст из описания действия = uploadAll.
Интересно, что документация для FileUpload () вообще не содержит этого атрибута. Отчет об ошибке CF-4199503 подтверждает, что версия функции не поддерживает ее. Основываясь на моих тестах ниже с CF11 и CF2016, я пришел к выводу, что они не поддерживаются ни в одной из версий.
Тестовое действие = UploadAll
Загрузка файла, который уже существует в каталоге назначения, не вызывает серьезной ошибки. CF заполняет указанную переменную сведениями об ошибках и выводит их на экран:
<cfif structKeyExists(FORM, "submit")>
<cffile destination="c:/temp"
action="uploadAll"
nameconflict="ERROR"
continueOnError="true"
errors="myErrors"
filefield="file_path" />
<cfdump var="#cffile#" label="cffile">
<cfdump var="#myErrors#" label="errors">
</cfif>
<form method="POST"
enctype="multipart/form-data">
<input type="file" name="file_path">
<input type="submit" name="test">
</form>
Результаты:
Тестовое действие = Загрузить
Измените действие на action="upload"
, и код завершится ошибкой. ColdFusion НЕ:
- Продолжить обработку после ошибки .. или
- Заполните
cffile
информацией об ошибке ... или
- Создать переменную результата, названную атрибутом
errors
Результаты:
Обратите внимание, опускание необязательного атрибута errors
приводит к тем же результатам. Он работает, как и ожидалось, при использовании action = uploadAll и завершается ошибкой при использовании action = upload