2013-05-03 111 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>