1

私のアプリケーションでは、ユーザーが写真をアップロードすると、cfc が写真のサイズを変更し、新しい画像を作成して、その新しい画像のサイズをサムネイルに変更します。問題は、この機能がゲームの早い段階で利用できなかったことです。画像ディレクトリを見て、どの画像にサムネイルがないかを調べたいと思います。

cfdirectory を使用して両方のディレクトリの構造体を出力し、サムネイル ディレクトリではなく画像にのみ存在するファイルをループし、関数を実行して画像のサイズを変更し、サムネイル ディレクトリに送信できると考えています。

これは間違った考え方ですか?もっと簡単な方法はありますか?

4

1 に答える 1

5

これは完全に合理的なアプローチであり、再帰コードを使用する必要さえありません。CFDirectory の再帰オプションを使用してすべてのファイルのリストを取得し、ファイル名とパスの両方をキーとして組み合わせて使用​​するだけで、チェックしているファイルが一意になることが保証されます。新しいサムネイルを配置する場所を正確に把握できるように、結果を少し変更する必要があるかもしれませんが、これでかなり近くなるはずです。

<cfset originals_path = expandPath('originals') />
<cfset thumbs_path = expandPath('thumbs') />

<cfset no_thumbs = find_missing_thumbs(originals_path, thumbs_path) />
<cfdump var="#no_thumbs#" />

<cffunction name="find_missing_thumbs">
    <cfargument name="o" />
    <cfargument name="t" />

    <cfset var originals = 0 />
    <cfset var thumbs = 0 />
    <cfset var missing_thumbs = [] />
    <cfset var massaged_originals = 0 />
    <cfset var massaged_thumbs = 0 />
    <cfset var qSearch = 0 />

    <cfdirectory action="list" directory="#arguments.o#" name="originals" recurse="true" />
    <cfdirectory action="list" directory="#arguments.t#" name="thumbs" recurse="true" />

    <cfquery name="massaged_originals" dbtype="query">
        select name, directory + name as fullpath from originals
    </cfquery>
    <cfquery name="massaged_thumbs" dbtype="query">
        select name, directory + name as fullpath from thumbs
    </cfquery>

    <cfloop query="massaged_originals">
        <cfquery name="qSearch" dbtype="query">
            select massaged_thumbs.name from massaged_thumbs where massaged_thumbs.fullpath = '#massaged_originals.fullpath#'
        </cfquery>
        <cfif qSearch.recordCount eq 0>
            <cfset arrayAppend(missing_thumbs, massaged_originals.name) />
        </cfif>
    </cfloop>
    <cfreturn missing_thumbs />
</cffunction>
于 2011-10-21T00:21:18.497 に答える