Обновление:
Ошибки, поданные для CF2016 (поддержка ядра заканчивается для CF11 после апреля 2019 года)
- CF-4204103 -
FORM
в области видимости отсутствуют значения, если поля с одинаковыми именами включают type=file
- CF-4204102 -
sameFormFieldAsArray
Настройка не работает с enctype="multipart/form-data"
После некоторого тестирования я пришел к выводу, что это ошибка ColdFusion.
Проблема:
Эта проблема возникает при таких условиях
- Запросявляется
multipart/form-data
POST - Содержит несколько полей с одинаковым именем
- Как минимум 1 из этих полей является полем файла, т.е.
type="file"
- Первое отправленное поле (внутри группы): NOT поле файла
В этих условиях ColdFusion, похоже, игнорирует все до поля первого файла ,(Если вы проверите sourcepond file ut, подтвердите, что поле метаданных отправлено до любых полей файла).Вот почему значение метаданных не появляется при выводе области видимости FORM.
Обратите внимание, настройка this.sameFormFieldsAsArray
не действует, поскольку она не работает с multipart/form-data
запросами.
Тестовый набор
Ниже приведен тестовый пример.Обратите внимание на результаты, которые вы ожидаете, когда то же именованное поле появляется после первого поля файла?
<cfdump var="#form#" label="Form scope">
<form method="post" enctype="multipart/form-data">
<br>First:
<input type="file" name="fileFirst"><br>
<input type="text" name="fileFirst" value="Lions"><br>
<br>Last:
<input type="text" name="fileLast" value="Tigers"><br>
<input type="file" name="fileLast"><br>
<br>Middle:
<input type="text" name="fileMiddle" value="Bears"><br>
<input type="file" name="fileMiddle"><br>
<input type="text" name="fileMiddle" value="Oh My"><br>
<input type="submit">
</form>
Обходное решение
Этот блог предоставляет обходной путь с использованием недокументированной функции области FORM,Использование form.getPartsArray()
обеспечивает доступ к обоим полям "filePond", позволяя вам извлечь значение пропущенного поля.Не идеально, но работает до тех пор, пока проблема не будет устранена.
Имейте в виду, что это недокументированная функция, поэтому обязательно выделите код для более легких изменений в случае, если Adobe изменит или удалит эту функцию в будущем (чтоони сделали раньше, так что честное предупреждение!).
<cfscript>
// dump raw form fields
for (part in form.getPartsArray()) {
writeDump({ fieldName = part.getName()
, isFile = part.isFile()
, fieldValue = (part.isFile() ? part.getFileName() : part.getStringValue())
}
);
}
</cfscript>