ColdFusion:在上传之前获取文件的名称

时间:2009-05-13 23:40:58

标签: coldfusion file-upload

在调用

之前,如何获取文件的文件名
<cffile action = "upload">

?我可以获取临时文件的文件名,但不能获取实际文件名。在PHP领域,我可以使用$ _FILES超全局来获得我想要的东西 - 但据我所知,ColdFusion中不存在这样的东西。

我可以获得文件名客户端,但真的想要这个服务器端。

由于

8 个答案:

答案 0 :(得分:15)

是的,这是可能的。在使用cffile标记之前,您可以使用此函数获取客户端文件名:

<cffunction name="getClientFileName" returntype="string" output="false" hint="">
    <cfargument name="fieldName" required="true" type="string" hint="Name of the Form field" />

    <cfset var tmpPartsArray = Form.getPartsArray() />

    <cfif IsDefined("tmpPartsArray")>
        <cfloop array="#tmpPartsArray#" index="local.tmpPart">
            <cfif local.tmpPart.isFile() AND local.tmpPart.getName() EQ arguments.fieldName> <!---   --->
                <cfreturn local.tmpPart.getFileName() />
            </cfif>
        </cfloop>
    </cfif>

    <cfreturn "" />
</cffunction>

此处有更多信息:http://www.stillnetstudios.com/get-filename-before-calling-cffile/

答案 1 :(得分:7)

在调用cffile之前我不知道找出方法,但可能有一种解决方法。

当您致电<cffile action="upload">时,您可以使用result="variable"指定结果。因此,使用目标作为临时文件调用上载。结果变量是一个包含成员clientFile的结构,它是客户端计算机上文件的名称。

现在,您可以使用<cffile action="move">执行原始文件名所需的操作。

答案 2 :(得分:7)

我正在使用Railo并找到原始文件名:

GetPageContext().formScope().getUploadResource('your_file_input_form_name').getName();

也许这也适用于adobe服务器?如果你想以某种方式重命名你上传的文件并且不希望它被移动通过两个临时目录(参见Renaming Files As They Are Uploaded (how CFFILE actually works)

,它非常方便

答案 3 :(得分:2)

哇,我找到了一个简单易用的解决方案!用一点点javascript

通过这种方式,您可以获得cffile上传的临时文件名和数据库的实际file.jpg名称

<html>
<head>
<script type="text/javascript">
function PassFileName()
{
document.getElementById("fileName").value=document.getElementById("fileUp").value;
}
</script>
</head>
<body>
<form name="form1" method="post" enctype="multipart/form-data" >
File: <input type="file" name="fileUp" id="fileUp" size="20" onchange="PassFileName()" /> <br />
Title: <input type="text" name="Title" id="Title"><br />
<input type="hidden" id="fileName" size="20" name="fileName" />
<input type="submit" name="submit">
</form>
</body>
</html>

答案 4 :(得分:1)

这是我们如何做到的。基本上,有一个文件字段和一个字符串字段。在提交表单之前,JavaScript会从浏览器中获取文件名。显然,您需要验证另一端的文件名是否实际存在(例如,如果用户禁用了JavaScript,它将为空)并且您需要解析字符串以处理平台差异({{1} }与/users/bob/file.jpg

C:\Documents and Settings\bob\file.jpg

顺便说一下,这种技术是跨语言的。它在RoR,PHP,JSP等方面同样有效。

编辑:如果用户“挥舞着凶猛的FireBug”,问题是什么?即使他们没有Firebug,他们仍然可以在文件末端重命名文件并更改输入。另外,你正在验证你的输入,对吧?

答案 5 :(得分:0)

另一个选择可能是让客户端代码使用文件名填充隐藏的表单字段,然后您将拥有服务器端。

Ben Doom的回答通常是我如何接近它。

答案 6 :(得分:-1)

如果在输入控件上定义了name属性,则文件名将在FORM范围内。例如:

<cfif not structIsEmpty(form)>
    <cfdump var="#form#">
<cfelse>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <form method="POST" action="#cgi.SCRIPT_NAME#">
            <input type="file" name="fileIn" />
            <input type="Submit" name="formSubmit">
        </form>
    </body>
    </html>
</cfif>

答案 7 :(得分:-1)

在ColdFuson,Railo或OpenBD中保存到服务器之前,无法知道上传文件的文件名。我通常在保存文件之前使用createUUID()函数生成“我的”新文件名。