2012-08-24 34 views
0

我正在做一個位於coldfusion8/mysql 5.0.88的網站,前端位於Jquery Mobile。我還使用了photoswipe.js插件,該插件允許圖像在單獨的視圖圖層中縮放和瀏覽。使用cfimage和cfxml時防止內存泄漏?

要設置photoswipeable圖像,我需要輸出

<cfoutput> 
<a class="swipeMe" rel="external" href="#variables.imageSrc#"> 
    <img src="#variables.imageSrc#" class="adaptImg ui-li-thumb" /> 
</a> 
</cfoutput> 

問題是imageSrc由用戶提供的,所以必須抓住/驗證/顯示之前調整圖像的大小,我需要的路徑圖片爲photoswipe鏈接。

我一直在擺弄這個了一會兒,並用以下解決方案上來:

// read img from user specs 
<cfimage name="myImage" source="#bildpfad##bilddateiname#" action="read" /> 
<cfif IsImage(myImage) is true> 
     // resize 
     <cfscript> 
      ImageSetAntialiasing(myImage,"on"); 
      variables.breite = 400; 
      ImageScaleToFit(myImage, variables.breite,"", "highestPerformance"); 
     </cfscript> 
     // write to xml, so I can get the path 
     <cfxml variable="imageXml"> 
      <cfimage quality=".5" action="writetobrowser" source="#myImage#" class="adaptImg ui-li-thumb"/ 
     </cfxml> 
     <cfset variables.imageSrc = imageXml.xmlRoot.xmlAttributes.src> 
     // output 
     <cfoutput> 
     <a class="swipeMe" rel="external" href="#variables.imageSrc#">#imageXml#</a> 
     </cfoutput> 
</cfif> 

雖然這個作品它幾乎攤位應用和記憶似乎泄漏爲好,因爲我失去越來越多的記憶,因爲我正在運行這個。

問題
是否有與上面的代碼導致內存泄漏任何明顯的問題?我想象中的圖像正在寫入某種臨時目錄(CFFileservelet?​​),並停留一段時間阻止我的記憶。如果是這樣,在圖像搜索中處理這個問題的替代方法是什麼?

謝謝!

+0

我不知道它與i相關,但是class屬性未在CFML中列爲有效屬性cs爲CFIMAGE標籤。此代碼是否工作但掛起?或只是掛? – Dpolehonski

+0

它的工作原理。我還設置了'id'和'title'以及除了class之外的自定義'data-xyz'屬性。我在某處讀到你可以爲cfimage添加屬性。讓我看看我是否找到鏈接。去[這裏](http://www.bennadel.com/blog/846-Styling-The-ColdFusion-8-WriteToBrowser-CFImage-Output.htm) – frequent

回答

2

爲什麼不只是你的服務器上創建的/ tmp文件夾中,並寫入操作的圖像出現,如:

<cfset newImageName=CreateUUID()&".jpg"> 
<cfimage action="write" destination="/tmp/#newImageName#" source="#myImage#"> 

然後你可以使用它:

<cfoutput> 
    <a class="swipeMe" rel="external" href="/tmp/#newImageName#"><img src="/tmp/#newImageName#" class="..."></a> 
    </cfoutput> 

樣品計劃任務刪除臨時文件:

<cfdirectory action="LIST" directory="#expandpath('tmp/')#" name="tempfiles" filter="*.jpg"> 
<cfloop query="tempfiles"> 
    <cfif dateadd('h',24,dateLastModified) lt now()> 
     <cffile action="DELETE" file="#expandpath('tmp/')##name#"> 
    </cfif> 
</cfloop> 
+0

這也是一個選擇。我喜歡我的解決方案,因爲它在一段時間後自行移除了圖像。有沒有辦法做到這一點=清理保存的圖像或設置有效性時保存或我必須手動清理? – frequent

+0

您可以爲名稱或元數據中的圖像添加時間戳。並在頁面的頭部執行一個CFTHREAD,它將清理超過特定時間的任何圖像。通過使用CFthread,您不會等待任務完成。火和忘記。 – Dpolehonski

+0

我會像Dpole建議的那樣去做,並使用文件的創建日期時間來清理比X時間早的圖像。這樣你就可以建立一些邏輯文件,即如果(image_resized不存在)rezie別的使用圖像,所以你只需要每個清理週期調整一次 – Paul