0

私は実行Coldfusion8していて、リモートの場所から画像を取得して保存する必要があり、取得されたものが実際に画像であるかどうかを検証しようとしています。

私は通常、次のような検証を行います。

<cffile result="upload" action="upload" accept="image/png" filefield="Dateiname5" destination="#tempDirectory#" nameconflict="overwrite" />
    <cfset testFilePath = tempDirectory & upload.serverFile>
    <cfimage name="tempFile" action="read" source="#testFilePath#" />
    <cfif NOT isImageFile( testFilePath ) >
        <cfset fileDelete( testFilePath ) />
        <cfthrow type="FileNotFound" message="#tx_settings_icons_error_img#" />
    <cfelseif ImageGetHeight( tempFile ) NEQ 512 or ImageGetWidth( tempFile ) NEQ 512>
        <cfset fileDelete( testFilePath ) />
        <cfthrow type="FileNotFound" message="#tx_settings_icons_error_size#" />
    <cfelseif NOT listfindnocase(allow, upload.serverfileext) >
        <cfset fileDelete( testFilePath ) />
        <cfthrow type="FileNotFound" message="#tx_settings_icons_error_file#" />
    </cfif>
    <cfset fileDelete( testFilePath ) />

そのため、安全なフォルダーにアップロードし、タイプ、サイズ、ファイル拡張子の検証を実行し、検証に失敗した場合は安全なフォルダーから破棄します。

私は今、拡張子とタイプを使用して検証する必要があり、cfttpそれを機能させていません。

今私はこれを持っています:

<cfhttp timeout="45" throwonerror="false" url="#variables.testFilePath#" method="get" getasbinary="yes" result="variables.objGet">
<cfset varaibles.allow = "png,jpg,jpeg">
<cfset variables.objImage = ImageNew(variables.objGet.FileContent)>
<cfif NOT isImageFile( variables.objImage ) >
    <cfset variables.failedLoads = variables.failedLoads & img_paths.bilddateiname & "(" & tx_gen_filetype & "), ">
    <!--- <cffile action="delete" file="#variables.objImage#"> --->
<cfelseif listFindNoCase( variables.allow, variables.fileExt) EQ 0>
    <cfset variables.failedLoads = variables.failedLoads & img_paths.bilddateiname & "(" & tx_gen_fileformat & "), ">
    <!---  <cffile action="delete" file="#variables.objImage#"> --->
<cfelse>
    <cfdump output="e:\website\stokkers\test2012\dump.txt" label="catch" var="it's an image allright">
</cfif>

質問:
ここで 使用できますisImageFileか、それとも私が作成した画像は画像ではありませんか?確認できますか? また、検証のいずれかが失敗した場合、作成イメージを再度削除するにはどうすればよいですか (メモリからだと思います)。cffile action="delete"うまくいかないようですか?

編集:
これは私が今チェックしているものです:

<cfhttp timeout="45" 
    throwonerror="false" 
    url="#variables.testFilePath#" 
    method="get" 
    useragent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12" 
    getasbinary="yes" 
    result="variables.objGet"
    >
<cfset variables.objImage = ImageNew(variables.objGet.FileContent)>
<!--- returns NO --->   
<cfdump output="e:\website\stokkers\test2012\dump.txt" label="catch" var="#IsBinary(variables.objImage)#">

<cfif NOT isImageFile( variables.objImage ) >
    <cfdump output="e:\website\stokkers\test2012\dump.txt" label="catch" var="not an image">    
    <!--- <cffile action="delete" file="#variables.objImage#"> --->
</cfif>

ファイルはjpg、まだ私はいつも失敗していますisImageFile

4

2 に答える 2

3

問題はisImageFile、ColdFusionlivedocsに基づくパスを想定していることです。を呼び出すことです。が有効な画像でないImageNew場合は、例外がスローされます。fileContentその後、cfcatchその例外を実行して、それに応じて動作させることができます。例外がスローされない場合、それは有効なイメージです。

于 2012-08-10T15:25:11.737 に答える