使用imageresizer.net通过id提供图像

时间:2013-03-22 09:44:54

标签: asp.net imageresizer

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

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

所以我看到的解决方案是有一个处理程序,它根据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做一个额外的请求(但这个是我现在最不关心的)。

1 个答案:

答案 0 :(得分:-1)

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

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

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

此外,如果你为每个请求点击数据库,请确保有适当的缓存。