使用Coldfusion上传时存储文件名

时间:2013-01-03 16:34:16

标签: sql coldfusion upload filenames

我正在尝试将要上传的所选文件的文件名存储到表单上的隐藏输入字段中。我的表格看起来像这样

<form id="uploadattachment" enctype="multipart/form-data" 
       method="post" action="/governance/attachmentfilestore">

  <cfif isDefined("fileUpload")>
        <cffile action="upload"
                fileField="fileUpload"
                accept="application/pdf"
                nameconflict="makeunique"
                destination="#ExpandPath( '/files/governance/upr/' )#">


       <input type="hidden" name="filename" id="filename" value="">
       <input type="hidden" readonly id="uprUUID" name="uprUUID" 
               style="width: 400px" value="<cfoutput>#params.key#</cfoutput>"/>
       <input type="hidden" readonly id="status" name="status" 
               style="width: 400px" value="1"/>
       <input name="fileUpload" type="file" style="width: 200px;" />
       <button type="submit" name="action" 
               class="submitBtn primary rightSubmitBtnSpace">Upload</button>
</form>

然后将其发送到控制器,控制器将其写入数据库,但我无法找到一种方法来获取要存储在“文件名”字段中的文件的名称。

有没有人有解决方法如何使用选择上传的文件名填充字段?

我已经添加了CFFILE.serverFile并且它工作了一次,但我猜这是因为它抓住了以前上传的文件名。

现在加载页面时,我在CFFILE中未定义Serverfile,因此不允许我使用文件名填充表单。

我的代码现在看起来像这样尝试并解决它,但这似乎也不起作用。

<cfif isDefined("CFFILE.serverFile")>
    <cfset form.filename = CFFILE.serverFile>
<cfelse>
     <cfset form.filename = "null">
</cfif>
<input type="hidden" name="filename" id="filename" 
        value="<cfoutput>#CFFILE.serverFile#</cfoutput>"/>

3 个答案:

答案 0 :(得分:5)

在上传文件之前,文件名不可用。发布表单后会发生这种情况。解决这个问题的唯一方法是尝试通过AJAX发布fileupload,然后返回文件名。

否则,您可以在上传文件并发布表单后将值分配给字段。

    <cfset form.filename = CFFILE.serverfile>

答案 1 :(得分:0)

您可以在保存前找到文件名。

Railo:

GetPageContext().formScope().getUploadResource("myFormField").getName()

的Adobe:

function getClientFileName(fieldName) {
var tmpPartsArray = Form.getPartsArray();
var clientFileName = "";

if (IsDefined("tmpPartsArray")) {
    for (local.tmpPart in tmpPartsArray) {
        if (local.tmpPart.isFile() AND local.tmpPart.getName() EQ arguments.fieldName) {
            return local.tmpPart.getFileName();
            }
        }
    }

return "";
}

来源:http://www.stillnetstudios.com/get-filename-before-calling-cffile/

答案 2 :(得分:0)

正如lvmisooners所说,

GetPageContext().formScope().getUploadResource("myFormField").getName()

适用于Railo(和Lucee),但我注意到一个有趣的皱纹:如果浏览器是IE,则返回包含文件名的完整源路径。另一方面,Firefox和Chrome只返回文件名。

对于我的应用程序,我需要完整的路径,但是如果浏览器是FireFox或Chrome,我们就无法找到它。如果有人有任何想法,我将非常感激!

(很抱歉没有回复lvmisooners,但我没有信誉点可以回复。)