1

IDとサーバーにアップロードされた画像のファイル名の間のマッピングをデータベースに保持します。

これは、ディスク上の実際のファイル名ではなくIDを使用してHTMLの画像を参照する必要があるためです(画像が置き換えられた場合、新しい画像への参照を置き換えるロジックを作成するのは困難です)。

したがって、私が見ている解決策は、IDに基づいて仮想イメージパスを取得し、このURLにリダイレクトするハンドラーを用意することです。これにより、ImageResizer.netが引き続き機能するようになります。

public class Image : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        int id;
        if (int.TryParse((string)context.Request.QueryString["id"], out id))
        {
           string path = ...  // get filename from database by id and append any other query params used by imageresizer.net               
           context.Response.Redirect(path); 
        }
        else
        {
            // return error response
        }
    }
}

画像の参照:

<img src="/Image.ashx?id=1&w=100" />

私の質問は、私はこれを正しく行っているのかということです。クライアントでのキャッシュなどの問題について考えています。また、リダイレクトを使用して追加のリクエストを実行します(ただし、これは私が今心配していることの中で最も少ないものです)。

4

1 に答える 1

-1

これは機能しますが、リダイレクトによって大幅なレイテンシが追加されます。HTML (ファイルが変更されたときに URLが変更される場所) を制御できない場合、選択肢は限られます。

リダイレクトが不要になるようにキャッシュ ヘッダーを操作できる場合はConfig.Current.Rewrite、ImageResizer によって提供されるイベントを使用するか、汎用の URL 書き換えソリューションを使用して、ファイル名を単純に解析して検索することができます。

これにより、サーバーへのラウンドトリップがなくなります。また、リダイレクトはキャッシュされるため、キャッシュ ディレクティブで問題を解決しない限り、同じ問題が発生することを覚えておいてください。

また、リクエストごとに DB をヒットしている場合は、何らかのキャッシュがあることを確認してください。

于 2013-03-22T13:32:14.273 に答える