0

我正在使用自定义编写的自动上传器将图像从用户导入到Amazon S3. 我正在我的数据库中建立一个并行image library,所以我知道我可以在 S3 上访问哪些图像,以免浪费任何 http 请求。

但是,我的上传程序有时会抛出错误(例如缺少源图像),尽管我正在验证,但有时我的媒体表中会出现条目,而 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. 如果是这样,是否有一种简单的方法来识别图像请求,因为我不想在每个应用程序请求上运行一个大例程。

感谢您的见解!

编辑
我不认为isDefined在显示之前在每张图像上运行它是可行的,因为这将是对 S3 的双重请求并且有很多图像。我想取404然后清理我的数据库,这样下次就不会再访问图像了。

4

2 回答 2

1

如果您不想使用 cfhttp 并像 Matt 建议的那样测试每个图像,为什么不使用 img 标记的 onError 处理程序从浏览器触发 ajax 调用。像这样的东西,但不是显示自定义图形,而是触发您的 ajax 来设置您的标志,或者甚至可能删除图像,因为它对用户不可见。 jQuery/JavaScript 替换损坏的图像

有关图像 onerror 事件的更多信息

我很想知道您将如何在图像上使用 isdefined 。从您发布的代码中isdefined("variables.imageSrc")不会对您有太大帮助。

于 2012-11-14T12:11:56.043 回答
0

如果您正在运行计划任务来执行此操作,为什么不使用 cfhttp 对图像资产执行 GET 请求?然后,您可以检查响应中的状态代码以验证服务器上是否存在文件,然后相应地更新数据库。

于 2012-11-14T10:40:05.720 回答