2012-05-16 71 views
0

我似乎在我正在處理的網站上的照片上傳功能存在問題。調試照片上傳/ CfCatch

<cftry> 

       <cffile 
        action="upload" 
        destination="#physicalPath#\PHOTOS" 
        filefield="photo" 
        nameconflict="makeunique"      
        accept="image/jpeg, image/pjpeg" 
        result="mypicture" 
       />              


    <cfset OutcomeID = "#FORM.OutcomeID#"/> 
       <!---Inserts file name and outcome id into Uploads table in the database ---> 
    <cfinvoke component="#classpath#.cf_classes.dao.uploads" method="insertPhoto" returnvariable="success"> 
    <cfinvokeargument name="fileName" value="#mypicture.SERVERFILE#"/> 
    <cfinvokeargument name="OutcomeID" value="#OutcomeID#"/> 
    </cfinvoke> 

     <cfset photoError = "Photo uploaded successfully"/> 
<cfcatch type="any"> 
     <cfset photoError = "There was an error uploading your photo.<br/> Please make sure it is a JPEG format."/> 
    </cfcatch> 
</cftry> 

無論如何,我只是不斷收回cfCatch中定義的錯誤消息。有什麼好方法來解決這樣的問題?任何人遇到任何問題嗎?

感謝您的幫助,我還是比較新的CF.

+2

我建議在調試99%之前不要使用TRY/CATCH,並完全理解正在發生的事情。沒有TRY/CATCH,你的上傳器是否工作得很好? –

+0

嗯,我想現在我知道該怎麼辦了!這應該足以讓我走在路上。謝謝。 – aceslowman

+1

在我看來,TRY/CATCH應該只在徹底調試所有內容時才使用,只是在遇到某種您無法預見或測試的情況時試圖提供更好的用戶體驗。 –

回答

1

你掩蓋了你的cfcatch正在捕捉的異常,只需在其中設置一個字符串即可。如果你不想刪除您的異常處理程序,看到一個快速簡便的方法是什麼潛在的錯誤是,當你仍然在代碼的工作是添加:

<cfcatch><cfdump var="#cfcatch#"></cfcatch> 

您可能需要添加一個abort="true"到您的cfcatch停止處理進一步的代碼,可以掩蓋您的異常轉儲或導致它不出現。

cfcatch.message到用戶看到的字符串是不好的做法,因爲這可能潛在地導致信息泄露可能會造成安全風險(例如,如果郵件中包含您的服務器或類似的文件路徑)

長期來看,如果您使用的是Coldfusion Builder,那麼您也可以使用內置的Coldfusion Debugger來逐步查看代碼,並查看當前變量狀態下的失敗位置。

+0

+1在調試器上。它不像Java調試器那麼容易,但它不是那麼艱難和長遠的,它絕對是一種方式。 – barnyr

+0

儘管說實話我實際上已經放棄了試圖讓CF調試器正常工作,並且我們購買了[FusionDebug](http://www.fusion-debug.com/fd/)許可證,這可以起到一定的作用。有Adobe調試器突然斷開連接或沒有擊中斷點等問題,但將不得不再次嘗試CF10。 – Marcin