首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免使用ImageResizer和DiskCache插件进行SQL查找

避免使用ImageResizer和DiskCache插件进行SQL查找
EN

Stack Overflow用户
提问于 2014-05-01 10:09:43
回答 1查看 160关注 0票数 0

目前,我在如何使用ImageResizer插件来正确地使用SQL和DiskCache插件时遇到了问题。

我的命名策略如下:

IIS重写模块将/myimagetitle-4319560-100x100.jpg重写为/4319560.jpg?id=4319560&title=myimagetitle&height=100&width=100。这如预期的那样起作用。

现在,为了找到图像的文件名,我需要使用SQL转换id。我已经创建了一个IVirtualImageProvider插件,它实现了FileExistsGetFile方法。

代码语言:javascript
复制
public IVirtualFile GetFile(string virtualPath, NameValueCollection queryString)
{
    var path = this.GetOriginalFilePath(queryString);
    return new VirtualFileWrapper(new ProductPhotoVirtualFile(path));
}

public bool FileExists(string virtualPath, NameValueCollection queryString)
{
    if (File.Exists(this.GetCachedFilePath(queryString)))
    {
        return true;
    }

    if (File.Exists(this.GetOriginalFilePath(queryString)))
    {
        return true;
    }

    return false;
}

private string GetCachedFilePath(NameValueCollection queryString)
{
    // Get customized cache file path based on the query string
    // "cache\4319\560\4319560_w_100_h_100.jpg"
}

private string GetOriginalFilePath(NameValueCollection queryString)
{
    // Perform SQL lookup to translate the id from the query to a file name
}

我使用DiskCache插件来确保使用IIS缓存我的映像。不幸的是,FileExists方法总是运行,对每个请求执行SQL。

我希望取得以下成果:

  1. 让DiskCache插件在FileExists方法之前运行,这样,如果文件被缓存,则跳过实际的SQL查找。
  2. 处理缓存文件命名策略,以便其他工具在正确的文件夹中生成图像。

是否有上述任何一种可能和/或我做错了什么?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-05-05 16:48:22

FileExists将始终被调用,因为没有其他方法来确定哪个IVirtualImageProvider应该对请求负责-因此,哪个负责提供缓存细节,比如修改的日期和键。更好的名字是IsHandled

实际上,躺在FileExists方法中是可以的,因为在.Open()期间抛出一个FileNotFoundException也将作为404处理。如果FileExists会阻止另一个IVirtualImageProvider的工作,那么躺在它的内部是不可以的。

在您的例子中,如果图像URL是您所期望的格式(例如,有一个ID,或者在专用于SQL的path结构中),您应该从FileExists返回true。通常最好使用路径前缀,因为很难可靠地预测更复杂的模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23405691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档