2012-11-14 18 views
0

我正在使用自定義書面自動上傳器將用戶的圖像導入到Amazon S3。我在我的數據庫中建立了一個並行的image library,所以我知道我可以在S3上訪問哪些映像,以避免浪費任何http請求。如何在Coldfusion中捕獲缺失圖像的404響應?

但是,我的上傳程序有時會拋出錯誤(例如源圖像丟失),雖然我正在驗證,但有時我的媒體表中的條目結束,S3上沒有匹配的圖像。

要更正這些,我正在考慮創建一個cfthread/cfschedule,這將從錯誤條目中清除我的映像數據庫。我不確定如何捕獲404 responses。現在我在一個頁面上有這個:

<img src="#variables.imageSrc#" alt="#some alt#" title="#some title#" class="ui-li-thumb ui-corner-all" /> 

它試圖加載圖像並返回404如果不成功。

問題
我將如何抓住這一404?我不想在標記中添加任何內容,因此我認爲這應該是onrequestend或我的application.cfc中正在監視的另一個Coldfusion事件。如果是這樣,是否有一種簡單的方法來識別圖像請求,因爲我不想在每個應用程序請求上運行一個大例程。

感謝您的見解!

編輯
我不認爲顯示它是feasable之前運行的每一個圖像上isDefined,因爲這將是S3雙請求,並有大量的圖片。我想採用404,然後清理我的數據庫,所以下次圖像將不再被訪問。

回答

1

如果您不想使用cfhttp並像Matt建議的那樣測試每個圖像,爲什麼不使用img標記的onError處理程序從瀏覽器觸發ajax調用。像這樣的東西,但不是顯示自定義圖形,而是觸發你的ajax設置你的標誌,或者甚至刪除圖像,因爲它對用戶是不可見的。 jQuery/JavaScript to replace broken images

更多信息上Image onerror Event

我很好奇,看看你會如何使用圖像上isdefined。從您的代碼發佈isdefined("variables.imageSrc")不會幫你很多。

+0

hm。但是沒有辦法在onRequestEnd上捕獲http請求響應(和其他參數)? – frequent

+0

不是我所知道的。 CF只是生成文本發送到瀏覽器。這取決於瀏覽器處理任何丟失的資產。 – Travis

+2

換句話說,''不會導致CF向這個資源發出請求,它只是將它傳遞給瀏覽器,所以CF無法知道它是否有效。要使CF檢查瀏覽器請求的狀態代碼,請使用cfhttp。如果你擔心帶寬使用,你可以嘗試使用'method =「head *'*應該*防止亞馬遜發送整個圖像,並給你頭信息。 – Travis

0

如果您正在運行計劃任務來執行此操作,爲何不使用cfhttp對圖像資源執行GET請求?然後,您可以檢查響應中的狀態代碼以驗證服務器上的文件是否存在,然後相應地更新數據庫。

+0

不完全。我的客戶頁面偶爾會出現錯誤(缺少圖像)。我的想法是每當圖像丟失時設置一個標誌,然後運行一個計劃任務從我的數據庫中刪除這些有缺陷的媒體庫條目,所以我不打擾用戶不得不等待清理。我的問題是,a)'哪裏'來捕獲http-return('onRequestEnd'?)和'如何捕獲它(類似於'GetPageContext()。GetRequest()'?)。 – frequent

相關問題