3

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

<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 并且它工作了一次,但我猜那是因为它抓住了以前上传的文件名。

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

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

<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>"/>
4

3 回答 3

6

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

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

    <cfset form.filename = CFFILE.serverfile>
于 2013-01-03T16:51:17.533 回答
0

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

雷洛:

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

土坯:

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/

于 2014-05-02T19:48:14.753 回答
0

正如 lvmisooners 所说,

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

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

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

(抱歉没有回复 lvmisooners 但我没有声望点可以回复。)

于 2016-07-27T20:43:23.063 回答