【问题标题】:How to configure handler path to serve images from folder and database?如何配置处理程序路径以提供来自文件夹和数据库的图像?
【发布时间】:2014-02-07 09:13:39
【问题描述】:

我正在使用处理程序从数据库中提供图像。我为处理程序配置的路径有问题。

    <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/”文件夹提供?

注意:我想保持路径不变,即http://www.abc.com/images/db/

【问题讨论】:

    标签: asp.net handler httphandler imageresizer


    【解决方案1】:

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

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

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

    然后您需要手动检查该映像是否存在,如果存在则提供该磁盘映像,这是 IIS 会执行的操作,但如果未找到,IIS 将返回 404,而您需要进行图像处理并返回图像数据。

    【讨论】:

      【解决方案2】:

      Please read the ImageResizer Best Practices.

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

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

      我强烈建议您重新考虑您在此处采用的方法。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 2010-09-29
        • 2011-07-08
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多