如何配置处理程序路径以从文件夹和数据库提供图像?

时间:2014-02-07 09:13:39

标签: asp.net handler httphandler imageresizer

我正在使用处理程序来提供来自数据库的图像。我遇到了为处理程序配置的路径问题。

    <add name="DbFileHandler" verb="*" path="/images/db/*" type="DbFileHandler" 
resourceType="Unspecified" allowPathInfo="true"   />

我们想要实现的流程是:

1)从文件夹中请求第一张图像说“/ images / db”。

2)如果文件夹不包含图像,则调用处理程序,从Db中获取图像,显示它并将图像写入文件夹

我们还实施了Imageresizer库来获取图像。

这里的问题是我们要求:

http://www.abc.com/images/db/101 - 称为处理程序

http://www.abc.com/images/db/image.jpg?width=200 - 调用来自文件夹的图像 http://www.abc.com/images/db/image.jpg - 再次调用Handler而不是调用文件夹中的图像

我们如何配置处理程序,以便对http://www.abc.com/images/db/image.jpg的请求不会定向到处理程序,而是从“/ images / db /”文件夹提供?

N.B:我想保持路径相同,即http://www.abc.com/images/db/

2 个答案:

答案 0 :(得分:0)

您使用的是IIS express / full吗?如果是这样,IIS可能会将.jpg扩展名作为静态文件处理并绕过您的处理程序。你需要设置:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

这将确保IIS不会将其视为静态文件,并且您的处理程序将运行。

然后,您需要手动进行检查以查看图像是否存在并提供该磁盘映像(如果是这样),IIS将执行此操作,但如果不是IIS,IIS将返回404发现你需要进行图像处理并返回图像数据。

答案 1 :(得分:0)

<强> Please read the ImageResizer Best Practices

正确使用ImageResizer,您只需要使用DiskCache和SqlReader plugin(或build your own provider),ImageResizer将为您处理请求拦截和(正确线程化)缓存。

除了使用HttpHandler而不是HttpModule的固有性能限制之外,在加载时您将创建大量锁定和/或损坏的文件,除非您实现了可以协调磁盘I / O的线程系统。

我强烈建议你重新考虑你在这里采取的方法。