我正在使用带有 ImageResizer 的 S3Reader 插件来读取来自亚马逊的调整大小的图像。
我无法让它在我的生产环境中工作,主要是因为我无法看到幕后发生的事情。
我已经添加了大量的日志记录,并且我知道 ImageMissing 事件正在被触发,当我请求预期的图像时。
如果我手动检查 url 那里的图像,那么我唯一能想到的是通过 S3Reader 插件处理 ImageResizer 的某个地方?
那么如何查看 ImageResizer 用于从 Amazon 请求图像的 Url 呢?
我怀疑因为我的存储桶位于 AisaPac 地区,所以它没有使用正确的 url?
需要注意的一些事情,我只处理media
子域上的图像并重新编写 url(这也会影响它吗?)
我要遵循的代码和配置:
<resizer>
<diskcache dir="~/app_data" autoClean="true" />
<clientcache minutes="1440" />
<plugins>
<add name="MvcRoutingShim" />
<add name="S3Reader" buckets="media.domain.com" useSubdomains="true" />
<add name="DiskCache" />
</plugins>
</resizer>
private static void ImageResizer_ReWrite(IHttpModule sender, HttpContext context, IUrlEventArgs args)
{
string subDomain = context.Request.Url.SubDomain();
if (string.IsNullOrWhiteSpace(subDomain) || subDomain != AppSettings.MediaSubDomain)
return;
args.VirtualPath = string.Format("/s3/{0}", AppSettings.AmazonS3BucketName) + args.VirtualPath;
Logger.Error("New VirtualPath: " + args.VirtualPath);
}
private static void ImageResizer_OnPostAuthorizeRequestStart(IHttpModule sender2, HttpContext context)
{
var subDomain = context.Request.Url.SubDomain();
if (string.IsNullOrWhiteSpace(subDomain) || subDomain != AppSettings.MediaSubDomain)
return;
Config.Current.Pipeline.SkipFileTypeCheck = true;
Config.Current.Pipeline.ModifiedQueryString["cache"] = ServerCacheMode.Always.ToString();
Logger.Error("ImageResizer Process: " + context.Request.RawUrl);
}
调试跟踪中没有警告或错误,当我希望返回图像时收到 404。