1

Amazon S3 でイメージをホストし、1 つのイメージ サイズのみを保存します。

これまで、Imageresizerを使用して、リクエストごとに画像のサイズを変更することに成功しました。

ここで、Cloudfront CDN を紹介する必要がありますが、これが問題になっています。

ドキュメントに従って設定をセットアップしました。

このような:

<resizer>
    <diskcache dir="~/app_data" autoClean="true"/>
    <clientcache minutes="1440"/>
    <cloudfront redirectThrough="http://cdn.example.com" redirectPermanent="false"/>
    <plugins>
      <add name="DiskCache"/>
      <add name="ClientCache"/>
      <add name="MvcRoutingShim"/>
      <add name="CloudFront"/> 
    </plugins>
  </resizer>

次に、アプリケーションへの URL を次のようにキャプチャします。

private static void ImageResizer_OnPostAuthorizeRequestStart(
    IHttpModule sender2, HttpContext context)
{
    string path = Config.Current.Pipeline.PreRewritePath;
    if (!path.StartsWith(PathUtils.ResolveAppRelative("~/cdn/"),
        StringComparison.OrdinalIgnoreCase))
    {
        return;
    }

    Config.Current.Pipeline.SkipFileTypeCheck = true;
    Config.Current.Pipeline.ModifiedQueryString["cache"]
        = ServerCacheMode.Always.ToString();
}

Imageresizer がそれらを処理できるようにします。

その場合、正しい CDN パスを使用するように URL が変更されますが、クエリ文字列パラメーターもセミコロンに変更されます。

http://example.com/cdn/image.jpg?mode=crop&width=200

これに:

http://mycdn.example.com/image.jpg;mode=crop;width=200

残念ながら、Amazon S3 はこれを好まず、Access Denied として除外します。ただし、Amazon は喜んで元のクエリ文字列を提供します。

では、クエリ文字列を保持して、Imageresizer がパラメータをセミコロンに変更しないようにするにはどうすればよいでしょうか。

または、セミコロンに関係なく画像を提供するように amazon を設定しますか?

4

1 に答える 1

1

S3 の代わりにCloudFrontを使用せず、両方を使用します。クラウドフロント ディストリビューションは、ImageResizer を実行しているサーバーを指している必要があります。このサーバーは、S3Readerを使用して Amazon S3 にアクセスします。CloudFront はS3 を直接指すべきではありません。これにより、画像から ImageResizer が削除されます。

http://imageresizing.net/docs/cloudを参照してください

于 2013-02-02T20:24:11.997 に答える