2013-05-03 109 views
0

我正在处理图像处理脚本,以创建服务器上已存在的图像的较小缩略图。循环遍历ColdFusion中多个目录中的所有图像

的目录结构,我需要通过如下方式搜索:

Content 
    -Att1 
     -image1 
      -imgA1_1.png 
      -imgA1_1_large.png 
     -image2 
      -imgA1_2.png 
      -imgA2_large.png 
     -image3 
      -imgA1_3.png 
      -imgA1_3_large.png 
    -Att2 
     -image1 
      -imgA2_1.png 
      -imgA2_1_large.png 
     -image2 
      -imgA2_2.png 
      -imgA2_2_large.png 
     -image3 
      -imgA2_3.png 
      -imgA2_3_large.png 
    -Att3 
     -image1 
      -imgA3_1.png 
      -imgA3_1_large.png 
     -image2 
      -imgA3_2.png 
      -imgA3_2_large.png 
     -image3 
      -imgA3_3.png 
      -imgA3_3_large.png 

etc... 

所以我想什么,到是可以遍历所有上面显示的图像,并且如果图像的尺寸超过500-500,然后创建一个100-100的缩略图。

有没有办法做到这一点没有循环通过每个目录?

回答

5

cfdirectory有一个递归属性。通过所有的文件夹,这样就可以循环,但它不会要求您完成所有的文件夹

<cfdirectory directory="yourDirectory" recurse="yes"> 
+0

这就是完美的感谢您的意见! – 2013-05-03 15:37:03

0

写代码回路如果您正在处理非常大的目录cfdirecotry结束是非常缓慢的。这是一个使用我编写的java的函数,因为我们有一些具有1000个图像的目录。它看起来并创建一个查询结果为您的所有文件,并且更快更快

<cffunction name="getDirectorylisting" returntype="query" output="true"> 
     <cfargument name="dirName" type="string" required="true" /> 
     <cfargument name="recurse" type="boolean" default="false" required="false" /> 
     <cfargument name="dirInfo1" type="query" default="#queryNew('datelastmodified,name,size,type,directory,hidden,pathname')#"> 
      <cfscript> 
       var thisFile = ''; 
       var listFiles = ''; 
       var pathToParse = trim(dirName); 

       var thisPath = ''; 
       var relPath = ''; 
       var theFileObj = ''; 
       var isDir = ''; 
       var isFile = ''; 
       var thisSize = ''; 
       var lastModified = ''; 
       var isHidden = ''; 
       var theType = ''; 

       if (left(dirName,2) == 'c:' || left(dirName,2) == 'd:' || left(dirName,2) == 'e:' || left(dirName,2) == '\\'){ 
        //do nothing path is already absolute 
       } else { 
        pathToParse = expandPath(pathToparse); 
       } 
       if(right(pathToParse,1) == '/' || right(pathToParse,1) == '\'){pathToParse = left(pathToParse,len(pathToParse)-1);} 
       if(right(dirName,1) == '/' || right(dirName,1) == '\'){dirName = left(dirName,len(dirName)-1);} 
       if (directoryExists(pathToParse)){ 
        listFiles = createObject("java","java.io.File").init(pathToParse).list(); 
        for (thisFile=1;thisFile<=arrayLen(listFiles);thisFile=thisFile+1){ 
         queryAddRow(arguments.dirInfo1); 
         thispath = "#pathToParse#\#listFiles[thisFile]#"; 
         relpath = "#dirName#/#listFiles[thisFile]#"; 
         theFileObj = createObject("java","java.io.File").init(thispath); 
         isDir = theFileObj.isDirectory(); 
         isFile = theFileObj.isFile(); 
         thisSize = val(theFileObj.length()); 
         lastModified = theFileObj.lastModified(); 
         isHidden = theFileObj.isHidden(); 
         theType = "dir"; 
         if (isFile){theType = "file";} 
         querySetCell(arguments.dirInfo1,"datelastmodified", lastModified); 
         querySetCell(arguments.dirInfo1,"name", listFiles[thisFile]); 
         querySetCell(arguments.dirInfo1,"size", thisSize); 
         querySetCell(arguments.dirInfo1,"directory", pathToParse); 
         querySetCell(arguments.dirInfo1,"hidden", isHidden); 
         querySetCell(arguments.dirInfo1,"type", theType); 
         querySetCell(arguments.dirInfo1,"pathName", relPath); 
         if (arguments.recurse && isDir && !isHidden){ 
          arguments.dirInfo1 = getDirectoryListing(relPath,true, arguments.dirInfo1); 
         } 
        } 
       } 
       return arguments.dirInfo1; 
      </cfscript> 
    </cffunction>