2
<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 データベースに 2 つの新しいエントリを作成する INSERT SQL ステートメントを作成できます。残念ながら、ファイル名も挿入する方法を決定できませんでした。ファイル名を効果的に挿入する方法を知っている人はいますか? 以下に示すように、ファイル名をデータベースに挿入することを期待して、Cffile.Server を効果的に使用していません。どんな洞察も歓迎されます。

エラー コード: エレメント SERVERFILE が CFFILE で定義されていません。

4

2 に答える 2

2

<cffileupload>は のようなフォーム コントロールのみです。<input type = "file">を使用するハンドラーを作成する必要があります<cffile action = "upload" (or action = "uploadall")><cffile>あなたのエラーは、タグがないために cffile 構造がないためです( cffile docsを参照)。

cffileupload docsの例に従ってください。

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

ドキュメントには、より役立つ 2 番目の例があります。長くなってきたのでここには含めませんので、リンク先のドキュメントを読んでください。

<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>
于 2012-12-27T04:29:42.430 に答える
-1

ファイル名の値を取得するには、cffile.serverfile を使用しません。file.serverfile を使用してみてください。何らかの理由で、CF はデフォルトでオブジェクト名を「file」にします。ファイル名からスペースや不正な文字を削除することを忘れないでください。StripAllButを使用して、すべての悪い文字を削除します。

于 2012-12-27T15:54:39.647 に答える