1

我在上传具有超长名称的文件时遇到了这个问题 - 我的数据库字段仅设置为 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>

有人看到这有什么问题吗?

谢谢!

4

2 回答 2

3

http://www.cfquickdocs.com/cf9/#cffile.upload

上传文件后,变量“clientFileName”将为您提供上传文件的名称,不带文件扩展名。

在上传之前读取文件名的唯一方法是使用 JavaScript 读取和解析文件字段中的值(文件路径)。

于 2012-06-22T18:14:05.760 回答
2

快速澄清您问题的措辞。当您的代码执行文件上传时,文件上传已经发生。该文件位于 ColdFusion 服务器上的临时目录中,与文件上传相关的表单字段包含该文件的临时文件名。除了检查是否已指定文件之外,不要直接对该文件执行任何操作,否则您将绕过一些内置的安全性。

您想使用带有操作cffile的标签(或等效的 udf)将临时文件移动到您选择的文件夹中。此时,您可以访问包含大量信息的结构。通常我“上传”到应用程序的临时目录中,为了安全起见,该目录应该在 webroot 之外。upload

此时,您将需要对文件进行任何验证,例如文件名长度、文件类型、文件大小等,如果文件未通过任何检查,则删除文件。如果它通过了所有检查,那么您将它移动到它的最终目的地,它可能位于 webroot 内部。

在您的情况下,您需要检查 cffile 结构元素clientFile,它是包含扩展名的原始文件名(您需要检查,因为扩展名不需要存在并且可以是任何长度)。

于 2012-06-22T18:56:13.603 回答