CFSCRIPT - Как проверить длину имени файла перед загрузкой
Я столкнулся с этой проблемой при загрузке файла с супер длинным именем - в поле моей базы данных было всего 50 символов. С тех пор я увеличил длину поля базы данных, но я хотел бы иметь возможность проверить длину имени файла перед загрузкой. Ниже мой код. Проверка возвращает 85 как длину символа. И он возвращает одинаковое количество для каждого другого файла, который я загружаю (ни один из которых не имеет длину имени файла 85).
<cfscript>
missing_info = "<p>There was a slight problem with your submission. The following are required or invalid:</p><ul>";
// Check the length of the file name for our database field
if ( len(Form["ResumeFile1"]) gt 100 )
{
missing_info = missing_info & "<li>'Resume File 1' is invalid. Character length must be less than 100. Current count is " & len(Form["ResumeFile1"]) & ".</li>";
validation_error = true;
ResumeFileInvalidMarker = true;
}
</cfscript>
Кто-нибудь видит что-то не так с этим?
Спасибо!
2 ответа
Быстрое уточнение в формулировке вашего вопроса. Ко времени выполнения вашего кода загрузка файла уже произошла. Файл находится во временном каталоге на сервере ColdFusion, а поле формы, относящееся к загрузке файла, содержит временное имя файла для этого файла. Помимо проверки наличия файла, ничего не делать напрямую с этим файлом, иначе вы обойдете некоторые встроенные средства безопасности.
Вы хотите использовать cffile
пометить с upload
действие ( или эквивалент UDF), чтобы переместить временный файл в папку по вашему выбору. В этот момент вы получаете доступ к структуре, содержащей много информации. Обычно я "загружаю" во временный каталог для приложения, который должен быть за пределами webroot для безопасности.
На этом этапе вы захотите выполнить любую проверку файла, такую как длина имени файла, тип файла, размер файла и т. Д., И удалите файл, если он не прошел проверку. Если он проходит все проверки, вы перемещаете его в конечный пункт назначения, который может находиться внутри корня веб-корня.
В вашем случае вы захотите проверить элемент структуры cffile clientFile
исходное имя файла, включая расширение (которое вам нужно проверить, поскольку расширение не обязательно должно присутствовать и может иметь любую длину).
http://www.cfquickdocs.com/cf9/
После того, как вы загрузите файл, переменная "clientFileName" даст вам имя загруженного файла без расширения файла.
Единственный способ прочитать имя файла перед его загрузкой - использовать JavaScript для чтения и анализа значения (путь к файлу) в поле файла.