上传具有超长名称的文件时遇到此问题 - 我的数据库字段仅设置为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>
有人认为这有什么问题吗?
谢谢!
答案 0 :(得分:3)
http://www.cfquickdocs.com/cf9/#cffile.upload
上传文件后,变量“clientFileName”将为您提供上传文件的名称,不带文件扩展名。
在上传文件名之前读取文件名的唯一方法是使用JavaScript来读取和解析文件字段中的值(文件路径)。
答案 1 :(得分:2)
快速澄清问题的措辞。当您的代码执行时,文件上传已经发生。该文件驻留在ColdFusion服务器上的临时目录中,与文件上载相关的表单字段包含该文件的临时文件名。除了检查是否已指定文件,不直接对该文件执行任何操作,或者您将绕过某些内置安全性。
您希望将cffile
标记与upload
action(or equivalent udf)一起使用,将临时文件移动到您选择的文件夹中。此时,您可以访问包含大量信息的结构。通常我会“上传”到应用程序的临时目录中,该目录应该在webroot之外以保证安全。
此时,您将要对文件进行任何验证,例如文件名长度,文件类型,文件大小等,如果未通过任何检查,则删除该文件。如果它通过了所有检查,那么你将它移动到它的最终目的地,这可能在webroot内。
在您的情况下,您需要检查cffile结构元素clientFile
,它是原始文件名,包括扩展名(您需要检查,因为扩展名不需要存在,可以是任何长度)。