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 回答