如何使用S3Reader验证Imageresizer调用的amazonurl

本文关键字:调用 amazonurl Imageresizer 验证 何使用 S3Reader | 更新日期: 2023-09-27 17:57:45

我使用带有ImageResizer的S3Reader插件从亚马逊读取并交付调整大小的图像。

我很难让它在我的生产环境中工作,主要是因为我看不清背后发生了什么。

我添加了大量的日志记录,并且我知道当我请求期望的图像时,ImageMissing事件正在被触发。

如果我手动检查url,那里的图像,所以我唯一能想到的是,在通过S3Reader插件处理ImageResizer的某个地方?

那么,我如何才能看到ImageResizer用来向亚马逊请求图像的Url呢?

我怀疑,因为我的bucket在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。

如何使用S3Reader验证Imageresizer调用的amazonurl

Amazon S3建议使用子域地址方法来确保非美国地区的最佳性能-这是S3Reader默认情况下所做的(您也启用了)。

因此,bucket名称不能有句点或前导短划线(但可以嵌入短划线)。

假设AmazonS3BucketName的值为"media.domain.com",这将是图像查找失败的原因。

请参阅S3Reader插件文档页面底部的存储桶命名注意事项。