【问题标题】:Coldfusion 10 cffileupload insert file nameColdfusion 10 cffileupload 插入文件名
【发布时间】:2012-12-12 11:46:48
【问题描述】:
<cfquery name="dirs" datasource="devsite" result="mySillyLittleResult">
        INSERT INTO folders (name)
        VALUES ('New Folder')
    </cfquery>

    <cfset fileId = mySillyLittleResult["GENERATEDKEY"]>

    <cfquery name="file" datasource="helloworld" result="anotherSillyLittleResult">
        INSERT INTO myfiles (id, filename)
        VALUES ('#fileId#', '#Cffile.ServerFile#')
    </cfquery>

    <cffileupload  
                    url="upload.cfm" 
                    progressbar="true" 
                    name="myupload" 
                    addButtonLabel = "Add File" 
                    clearButtonlabel = "Clear it" 
                    hideUploadButton = "false" 
                    width=600 
                    height=400 
                    title = "File Upload" 
                    maxuploadsize="20" 
                    extensionfilter="*.jpg, *.png, *.flv, *.txt" 
                    BGCOLOR="##FFFFFF" 
                    MAXFILESELECT=10 
                    UPLOADBUTTONLABEL="Upload now" align="center" />

目前我正在使用 Cffileupload 批量上传文件。我能够创建在 SQL 数据库中创建两个新条目的 INSERT SQL 语句。不幸的是,我也未能确定如何插入文件名。有谁知道有效插入文件名的方法?正如您将在下面看到的,我没有有效地使用 Cffile.Server 以希望也将文件名插入数据库。欢迎任何见解。

错误代码:CFFILE 中未定义元素 SERVERFILE。

【问题讨论】:

  • 你得到的错误信息意味着要么没有名为 cffile 的结构,要么存在,但它不包含名为 ServerFile 的键。 cffile 上的 cfdump 将帮助您解决此问题。
  • 我相信这是因为您为文件上传命名。尝试根据您上传的名称进行引用
  • @Matt 仅与 cffile result="myNiftyResult" 属性有关。您将使用 myNiftyResult.serverFile 而不是 cffile.serverFile &lt;cffileupload&gt; name 属性命名客户端中的对象。

标签: sql coldfusion fileserver


【解决方案1】:

要获取文件名的值,请不要使用 cffile.serverfile。尝试使用 file.serverfile。出于某种原因,CF 将对象名称默认为“文件”。不要忘记从文件名中删除空格和非法字符。我使用StripAllBut 删除所有坏字符。

【讨论】:

  • 这是不正确的。文件已被弃用多年。正确的名称是 cffile。尽管现在很多人选择使用result 属性。
  • 证明上帝是错误的。 :p
【解决方案2】:

&lt;cffileupload&gt;只是表单控件,和&lt;input type = "file"&gt;一样,你仍然需要创建一个使用&lt;cffile action = "upload" (or action = "uploadall")&gt;的处理程序。您的错误是因为没有 &lt;cffile&gt; 标签,所以没有 cffile 结构(请参阅 cffile docs)。

根据example in the cffileupload docs

<cfif isdefined("form.FIELDNAMES")> 
      <cffile action = "upload" destination = "#ExpandPath('.')#" nameconflict="makeunique"> 
</cfif> 
<cffileupload name="myuploader">

文档中有第二个示例会更有帮助。它是冗长的,所以我不在这里包括它,所以请阅读链接的文档。

您可能希望将 &lt;cffile&gt; 标记放在查询上方,就像这样

<cfif structKeyExists(form, "fieldNames")>
  <cffile action = "upload" destination = "#ExpandPath('[your upload folder]')#" nameconflict="makeunique">
  <cfquery name="dirs" datasource="devsite" result="mySillyLittleResult">
    INSERT INTO folders (name)
    VALUES ('New Folder')
  </cfquery>

  <cfset fileId = mySillyLittleResult["GENERATEDKEY"]>
  <!--- I assume it's the same database with the same data source? --->
  <!--- Changed "helloworld" to "devsite" --->
  <cfquery name="file" datasource="devsite" result="anotherSillyLittleResult">
    INSERT INTO 
      myfiles (id, 
               filename)
      VALUES (<cfqueryparam cfsqltype="cf_sql_integer" value="#fileId#">, 
              <cfqueryparam cfsqltype="cf_sql_varchar" value="#Cffile.ServerFile#">)
  </cfquery>
</cfif>

【讨论】:

  • 其实如果fileIdauto_increment列,就不需要引号了。但他们应该使用cfqueryparam
  • 确实,我也有同样的想法,但忘记将它与我所有的其他编辑(其中有几个)一起添加,并感谢额外的#编辑,个人的烦恼。我在半夜回答,只有一只眼睛在工作。
猜你喜欢
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多