1

我在数据库中保留了 ID 和上传到服务器上的图像的文件名之间的映射。

这是因为我需要使用 ID 而不是磁盘上的实际文件名来引用 HTML 中的图像(如果图像被替换,很难有一个逻辑来替换对新图像的引用)。

所以我看到的解决方案是有一个处理程序,它根据 ID 获取虚拟图像路径,然后重定向到这个 URL。这应该使 ImageResizer.net 仍然可以工作。

public class Image : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        int id;
        if (int.TryParse((string)context.Request.QueryString["id"], out id))
        {
           string path = ...  // get filename from database by id and append any other query params used by imageresizer.net               
           context.Response.Redirect(path); 
        }
        else
        {
            // return error response
        }
    }
}

参考图片:

<img src="/Image.ashx?id=1&w=100" />

我的问题是,我这样做对吗?我正在考虑诸如在客户端缓存之类的问题。另外,使用 Redirect 做一个额外的请求(但这确实是我现在最不关心的一个)。

4

1 回答 1

-1

它可以工作,但重定向会增加显着的延迟。如果您无法控制 HTML(这是更改文件时 URL更改的位置),那么您的选择将受到限制。

如果您可以使用缓存标头从而不需要重定向,则可以使用Config.Current.RewriteImageResizer 提供的事件,或使用通用 URL 重写解决方案来简单地解析和查找文件名。

这将消除到服务器的往返 - 请记住,重定向是缓存的,因此除非您使用缓存指令解决问题,否则您将遇到同样的问题。

此外,如果您为每个请求访问数据库,请确保有某种缓存到位。

于 2013-03-22T13:32:14.273 回答