C# ImageResizer和Diskcache每次仍会查询我的IVirtualImageProvider
我正在尝试在ASP.NETMVC4网站中使用ImageResizer(从)。 我创建了一个IVirtualImageProvider,用于在远程服务器上获取我的图像(实际上是通过实体连接到SQL server) 一切都很好。 奇怪的是,对于每个图像请求,我的提供者都会被调用两次,但视觉效果还可以 现在,我想测试DiskCache插件。所以Nuget+config。。。而且。。。一切似乎都是一样的:我的远程服务器每次请求都会被调用两次 有什么我不明白的吗?使用diskcache应该会阻止调用我的图像和提供程序的正常渲染,不是吗 我的配置:C# ImageResizer和Diskcache每次仍会查询我的IVirtualImageProvider,c#,asp.net-mvc,imageresizer,diskcache,C#,Asp.net Mvc,Imageresizer,Diskcache,我正在尝试在ASP.NETMVC4网站中使用ImageResizer(从)。 我创建了一个IVirtualImageProvider,用于在远程服务器上获取我的图像(实际上是通过实体连接到SQL server) 一切都很好。 奇怪的是,对于每个图像请求,我的提供者都会被调用两次,但视觉效果还可以 现在,我想测试DiskCache插件。所以Nuget+config。。。而且。。。一切似乎都是一样的:我的远程服务器每次请求都会被调用两次 有什么我不明白的吗?使用diskcache应该会阻止调用我的图
<resizer>
<pipeline fakeExtensions=".ashx" vppUsage="Always" />
<diskCache dir="~/c_dynimages" autoClean="false" hashModifiedDate="true" enabled="true" subfolders="32" cacheAccessTimeout="15000" />
<cleanupStrategy startupDelay="00:05" minDelay="00:00:20" maxDelay="00:05" optimalWorkSegmentLength="00:00:04" targetItemsPerFolder="400" maximumItemsPerFolder="1000"
avoidRemovalIfCreatedWithin="24:00" avoidRemovalIfUsedWithin="4.00:00" prohibitRemovalIfUsedWithin="00:05" prohibitRemovalIfCreatedWithin="00:10" />
<plugins>
<add name="MvcRoutingShim" />
<add name="TwinklazDb" />
<add name="DiskCache" />
</plugins>
</resizer>
欢迎任何帮助 延迟所有工作,直到调用.Open()为止
IVirtualImageProvider实现应延迟所有工作,直到调用.Open()为止
DiskCache需要一个IVirtualFile实例来准确地导出缓存哈希,因为一些提供程序还提供了一个修改的日期来启用无效。您能描述更多吗?我是ImageResizer的新手。你能解决你的问题吗?你能描述一下吗?我是ImageResizer的新手。提前谢谢
/// <summary>
/// Actually install plugin into plugin collection of ImageReizer
/// </summary>
/// <param name="c">config</param>
/// <returns>this</returns>
public IPlugin Install(Configuration.Config c)
{
c.Plugins.add_plugin(this);
return this;
}
/// <summary>
/// Remove plugin from list
/// </summary>
/// <param name="c">ImageResizer configuration</param>
/// <returns>true</returns>
public bool Uninstall(Configuration.Config c)
{
c.Plugins.remove_plugin(this);
return true;
}
#endregion
/// <summary>
/// Returns true if virtualPath contains prefix (dynimages/)
/// </summary>
/// <param name="virtualPath"></param>
/// <param name="queryString"></param>
/// <returns></returns>
public bool FileExists(string virtualPath, System.Collections.Specialized.NameValueCollection queryString)
{
bool result = false;
if (virtualPath.StartsWith(PREFIX))
{
long id;
result = long.TryParse(virtualPath.Substring(PREFIX_LENGTH).Replace(".jpg",""), out id);
}
return result;
}
/// <summary>
/// Ask binary service to return a file
/// </summary>
/// <param name="virtualPath">Path as read from http request</param>
/// <param name="queryString">Unused</param>
/// <returns>A dbfile</returns>
public IVirtualFile GetFile(string virtualPath, System.Collections.Specialized.NameValueCollection queryString)
{
long id;
if (long.TryParse(virtualPath.Substring(PREFIX_LENGTH).Replace(".jpg", ""), out id))
return new DbFile(virtualPath, Services.Binary.GetBinary(id));
return null;
}
private class DbFile : IVirtualFile
{
#region Private members
/// <summary>
/// virtual path of the file
/// </summary>
private string _virtualPath;
/// <summary>
/// File content (blob)
/// </summary>
private byte[] _content;
#endregion
#region Constructor
/// <summary>
/// Builds a DBFile from path and content
/// </summary>
/// <param name="path">Path to file (as read from http handler)</param>
/// <param name="content">Content of the file read from database</param>
public DbFile(string path, byte[] content)
{
_virtualPath = path;
_content = content;
}
#endregion
/// <summary>
/// Opens a stream on file content and returns it
/// </summary>
/// <returns>A memory stream on content array</returns>
public System.IO.Stream Open()
{
return new System.IO.MemoryStream(_content);
}
/// <summary>
/// Gets virtual path
/// </summary>
public string VirtualPath
{
get { return _virtualPath; }
}
}
http://localhost:36782/dynimages/1.jpg.ashx?width=100&height=50&mode=stretch