1

ユーザーが画像をサーバー ディレクトリにアップロードできるようにする機能を作成するという、比較的単純なタスクだと思っていた作業に行き詰まっており、助けを求めています。

ファイル入力から渡されたデータである「imagedata」という名前の変数、指定された画像名である「name」という名前の変数、およびファイル拡張子。

このファイルを保存する関数 (ハンドラー) で使用しているコードは次のとおりです。

<cfset form.imageName = form.name & "." & form.imagetype />
...
<cffile action="write" file="#sitepath#storage/bannerImages/#form.imagename#" output="#form.imageData#" />

これは明らかにうまくいきません。正しい名前でファイルを保存しますが、ファイルを正しく保存せず、画像としてレンダリングしません。これは比較的単純なことだと思いますが、奇妙なことに、Google で何も見つからないため、何かを見落としていると思います。この問題のヘルプをいただければ幸いです。

4

1 に答える 1

9

使わないaction="write"で、使ってくださいaction="upload"

例:

<cffile
    action       = "upload"
    fileField    = "ImageData"
    destination  = "/tmp/uploads"
    accept       = "image/jpg"
    nameConflict = "MakeUnique"
/>

これにより、オンラインでアクセスできないディレクトリである (Windows/tmp/uploadsなどで使用) にファイルが配置されます。d:/tmp/uploads

この時点で、ファイルが主張どおりのものであることを確認する必要があります。つまり、適切なサイズとファイルサイズの画像ファイルであり、マスクされた EXE や埋め込まれた ZIPではありません。

ファイルがサーバー上で安全にホストできることを確認したら、そのファイルを適切なディレクトリに移動し、選択した名前に設定できます。

何かのようなもの...

<cfif cffile.FileWasSaved>

    <cfset UploadedFileName = cffile.ServerDirectory & '/' & cffile.ServerFile />

    <cfif NOT IsImageFile( UploadedFileName )>
        <cfthrow message="Uploaded file not an image." />
    </cfif>

    <!--- INFO: Checks if zip embedded in image. --->
    <cftry>
        <cfzip action="list" file="#UploadedFileName#" name="tmp"/>
        <cfthrow message="Embedded zip files not allowed."/>
        <!--- TODO: Verify correct exception type for CF: --->
        <cfcatch type="java.util.zip.zipexception"></cfcatch>
    </cftry>

    <!---
        TODO: Validate any necessary business rules
        (e.g. image not too large, etc)
    --->        

<cfelse>
    <cfthrow message="File Upload Error"/>
</cfif>


<cfif refind('\W',Form.Name)>
    <cfthrow message="Invalid Name specified. Only alphanumerics allowed."/>
</cfif>
<cfif NOT ListFindNoCase('PNG,JPG,GIF',Form.ImageType)>
    <cfthrow message="Invalid FileType specified. Must be PNG/JPG/GIF"/></cfif>
</cfif>

<cffile
    action      = "rename"
    source      = "#UploadedFileName#"
    destination = "#sitepath#storage/bannerImages/#Form.Name#.#Form.ImageType#"
/>

そのコードはテストされていません。サーバー上で実行するすべてのものと同様に、特にクライアントのアップロードに関連するコードでは、使用する前に何をしているのかを理解してください。Adobe LiveDocsさまざまな CF ブログには、時間をかけて消化する価値
のある貴重な情報がたくさんあります。

于 2009-10-25T00:44:51.233 に答える