【问题标题】:when image not found show default image当找不到图像时显示默认图像
【发布时间】:2013-02-02 07:00:46
【问题描述】:
我有一个在 iis 7.5 上运行的 mvc 4 应用程序。该应用程序会生成一个产品目录,其中包含分配给每个产品的图像。
有时某些产品没有分配任何图像,在这种情况下,我想包含一个占位符图像而不是什么都没有。直到运行时出现404,图像才不存在。
我正在考虑在 IIS 中设置 url 重写规则,如果从匹配条件的图像返回 404,则显示默认图像。我对此有几个问题:
有可能吗?如果可以,怎么做?
这样做是否存在性能问题?
有没有其他方法可以实现上述目标?
【问题讨论】:
标签:
asp.net-mvc
iis
asp.net-mvc-4
url-rewriting
iis-7.5
【解决方案1】:
好问题。我的第一个想法是找出文件是否存在于服务器上。我假设这不像拥有图像的数据库列那么容易。
也许您有一个场景,您查看一个文件夹,其中图像与 productId 同名(或类似名称)。您可以使用 System.IO.FileExists() 来确定文件是否存在。这可能不是非常有效。
另一个想法可能是查看文件所在的目录并将它们放入某种字典中。您可以将其存储在应用程序缓存中。您可以在渲染图像之前查看缓存。当然,您想要一种刷新字典的方法(即为该产品上传产品图片)
我不知道重写将如何工作。我认为您可以在自己的目标上做一些工作——以避免这样做。
<img src="(@Dictionary[key] != null ? Model.Image : Model.EmptyImage)" />
【解决方案2】:
如果你真的想用 IIS 来处理这个问题,你可以使用自定义的 404 错误页面配置。
我不知道此解决方案的性能,但我看不出它会成为问题的原因。
-
设置一个包含所有图像的Virtual Directory(我们称之为my_images)。
-
在虚拟目录根目录中添加您的通用图片(因此此图片可使用 url http://yourwebsite.com/my_images/generic.jpg 获得)。
-
在 IIS 管理器中选择您的 my_images 虚拟目录并在 Error Pages 下编辑 404 自定义错误页面,如下所示:
当您尝试访问虚拟目录 my_images 下的资源时触发 404 错误时,您现在应该拥有通用图片。
限制:
自定义 404 错误页面不限于图像格式,因此任何在您的虚拟目录下触发 404 错误的请求都会呈现通用图像。
如果要使用localhost进行测试,需要点击Edit Feature Settings...,将值改为Custom error pages: