0

ColdFusion は初めてです。ColdFusion 10 を使用しています。 を使用して複数の画像ファイルをアップロードしようとしていますcffileupload。期待どおりにファイルをアップロードできます。しかし、アップロードする前にメタデータを取得し、アップロードされたファイルを取得したいと思いclientFileDirectoryます。PFBコード

ファイルアップロード.cfm

<cffileupload
    name = "uploadDemo"
    url="uploadSelectedFiles.cfm"
    progressbar="true"
    addButtonLabel = "Select File(s)"
    clearButtonLabel = "Clear"
    width="500"
    height="400"
    title="Choose Files To Upload"
    maxUploadSize="1"
    maxFileSelect="10"
    extensionfilter="*.gif,*.jpg,*.png,*.doc"
    uploadButtonLabel="Upload"
    onComplete="previewfile"
    >

uploadSelectedFiles.cfm

<cffile action="uploadall" 
    destination="#expandpath('.')#"  
    nameconflict="makeUnique" 
    result="uploadResult" 
    />
<cfoutput>try</cfoutput>
<cfdump var="#cffile#">

しかしcffile.clientDirectory、ステータス コード :500 (ファイルをアップロードできません....) がスローされます。もう 1 つ、メイン ページ (ファイル アップロード ページ) で「try」文字列の出力を表示できません。

編集済み:追加情報

返信ありがとうございます。

cffile.clientDirectory (uploadResults.clientDirectory) 情報を探していますが、取得できません。助けてください...その情報が切実に必要です。アップロードされたファイルに対して取得していません。PFB私の試験。

私は試した

<cfdump    var="#uploadResult#"    label="Upload Meta Data"    output="#expandPath( './log.txt' )#"    format="text"    />

ログが利用可能です。

log.txt

Upload Meta Data - array - Top 1 of 1 rows
1) [struct]
ATTEMPTEDSERVERFILE: cat.jpg
CLIENTDIRECTORY: [empty string]
CLIENTFILE: cat.jpg
CLIENTFILEEXT: jpg
CLIENTFILENAME: cat
CONTENTSUBTYPE: octet-stream
CONTENTTYPE: application
DATELASTACCESSED: {d '2013-05-20'}
FILEEXISTED: YES
FILESIZE: 446759
FILEWASAPPENDED: NO
FILEWASOVERWRITTEN: YES
FILEWASRENAMED: NO
FILEWASSAVED: YES
OLDFILESIZE: 446759
SERVERDIRECTORY: E:\Inetpub\wwwroot\cdd\Portfolio\eKris
SERVERFILE: cat.jpg
SERVERFILEEXT: jpg
SERVERFILENAME: cat
TIMECREATED: {ts '2013-05-20 17:35:57'}
TIMELASTMODIFIED: {ts '2013-05-20 17:35:57'} 

clientDirectory 情報を取得するのを手伝ってもらえますか?

4

3 に答える 3

1

@Leigh が述べたように、通常、サーバー上のアップロードされたファイルの名前と場所のみに関心があります。クライアントのマシン上のディレクトリは関係ありません。さらに、空のフィールドが返されるのは、最新のブラウザーのセキュリティが強化されたためだと思います。クライアントのマシンからその情報を公開することは、セキュリティ違反と見なされます。Adobe は、下位互換性のためにこの機能を残しただけだと思います。

フィールドとの矛盾した結果について議論している 3 つの古い投稿を見つけましたcffile.clientDirectory。それらはすべて 2008 年から戻ってきたもので、ブラウザごとに動作が異なると述べています。それらはすべて、フィールドに何かを返すのは Internet Explorer だけであると述べていcffile.clientDirectoryます。投稿は、彼らが Internet Explorer 7 を使用していたことに言及しています。当時でさえ (投稿の 1 つによると)、Firefox、Netscape、および Safari の現在のバージョンはこの情報を返さず、Chrome がまだ存在していなかったと思います。Microsoft は最終的に他のブラウザーに追いつき、この情報を提供しなくなったと結論付けます。

私が言及した3つの投稿は次のとおりです。

于 2013-05-21T12:56:05.560 に答える
0

アップロードされたファイルの clientFileDirectory を取得する

<cffile action="uploadall" result="uploadResult" ...>

いくつかの問題があります。

  1. 「結果」名を指定したため、ファイル プロパティはuploadResultではなくという名前の変数に配置されますcffile

  2. <cffile action="uploadAll">複数のファイルを処理するように設計されています。したがって、単一の構造体だけでなく、ファイル プロパティの配列を返します。そのため、配列をループして各ファイルのプロパティにアクセスする必要があります。

  3. 実際のプロパティの名前clientDirectoryは ではなくclientFileDirectoryです。

しかし、そうは言っても、クライアント上のファイルの場所は通常関係ありません。ほとんどの Web アプリケーションでは、サーバー上のアップロードされたファイルの名前と場所に関心があるだけなので、後で表示/ダウンロードできるようにすることができます。serverXXX代わりに変数を使用するつもりだったのではないでしょうか? すなわち

   <cfloop array="#uploadResult#" index="fileProp">
        serverFile: <cfdump var="#fileProp.serverFile#">
        serverDirectory: <cfdump var="#fileProp.serverDirectory#">
   </cfloop>

アップロードするにメタデータを取得したい

ファイルがアップロードされた<cffile action="uploadAll">コードが実行されます。実際に行うことは、ファイルを移動して名前を変更することだけです。したがって、技術的には、アップロード前にその情報を取得することはできません。アップロード後にのみ取得できます。

于 2013-05-20T14:58:51.063 に答える
0
<cfif structKeyExists(form,"submit")> <br/>
    <cffile action="uploadall" destination="#expandpath('./upload')#"> 
</cfif> <br/>
<cfform action="#cgi.script_name#" enctype="multipart/form-data"> <br/>
    <cfinput type="file" name="attachment1"> <br/><br> 
    <cfinput type="file" name="attachment2"> <br/><br> 
    <cfinput type="file" name="attachment3"> <br/><br> 
    <cfinput type="submit" name=" submit" value="submit"> <br/> 
</cfform>

これを確認してください。

于 2013-05-20T06:25:50.867 に答える