在我的应用程序中,用户上传照片,cfc 调整照片大小,创建新图像并将新图像调整为缩略图。麻烦的是,这个功能在游戏早期是不可用的。我现在想查看图像目录并找出哪些图像没有缩略图。
我在想我可以使用 cfdirectory 输出两个目录的结构,然后遍历仅存在于图像中而不存在于缩略图目录中的文件,并运行一个函数来调整图像大小并将它们发送到缩略图目录。
这是有缺陷的想法吗?有没有更简单的方法?
在我的应用程序中,用户上传照片,cfc 调整照片大小,创建新图像并将新图像调整为缩略图。麻烦的是,这个功能在游戏早期是不可用的。我现在想查看图像目录并找出哪些图像没有缩略图。
我在想我可以使用 cfdirectory 输出两个目录的结构,然后遍历仅存在于图像中而不存在于缩略图目录中的文件,并运行一个函数来调整图像大小并将它们发送到缩略图目录。
这是有缺陷的想法吗?有没有更简单的方法?
这是一种完全合理的方法,您甚至不必使用递归代码。只需使用 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>