Coldfusion 10 cffileupload插入文件名

时间:2012-12-27 02:32:45

标签: sql coldfusion fileserver

<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批量上传文件。我能够创建INSERT SQL语句,在SQL数据库中创建两个新条目。不幸的是,我在确定如何插入文件名方面也没有成功。有没有人知道有效插入文件名的方法?正如您将在下面看到的,我无法有效地使用Cffile.Server,希望还能将文件名插入数据库。任何见解都会受到欢迎。

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

2 个答案:

答案 0 :(得分:2)

<cffileupload>只是表单控件,如<input type = "file">,您仍需要创建使用<cffile action = "upload" (or action = "uploadall")>的处理程序。您的错误是因为没有<cffile>标记而没有cffile结构(请参阅cffile docs)。

符合example in the cffileupload docs

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

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

您希望将<cffile>标记放在查询上方,如此

<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>

答案 1 :(得分:-1)

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