4

30枚の画像があり、その横にアップロードボタンがあります。

新しい画像を選択して更新を押すと、古い画像が削除され、同じ名前とパスで新しい画像が保存されます。

私はこれを行います:

string path = "~/Pics/Image1.jpg";
System.IO.File.Delete(Server.MapPath(path));
uploadfile.SaveAs(path);

それは機能します。すべての画像を保持しているフォルダの変更を確認できますが、ブラウザでは古い画像が表示され、新しい画像を表示するにはキャッシュを削除する必要があります。

ブラウザからキャッシュを削除せずに画像を更新して新しい画像を表示する方法はありますか?

4

2 に答える 2

3

httpヘッダーLast-Modified をブラウザに変更して、変更画像を識別し、新しい画像をダウンロードする必要があります。あなたの反応は明らかに正しいです。

var headerValue = Request.Headers['If-Modified-Since'];
if (headerValue != null)
{
    var modifiedSince = DateTime.Parse(headerValue).ToLocalTime();
    // Insert date of your file change
    if (modifiedSince >= dateOfFileChanged)
    {
        return new HttpStatusCodeResult(304, "Page has not been modified");
    }
}

// page has been changed.
// generate a view ...

// .. and set last modified in the date format specified in the HTTP rfc.
Response.AddHeader('Last-Modified', dateOfFileChanged.
                                ToUniversalTime().ToString("R"));

このコードは、この質問Last-Modified Header in MVCから抽出されています。

于 2012-08-05T19:38:06.197 に答える
2

ご想像のとおり、これはブラウザのキャッシュの問題です。あなたができることは、ブラウザがファイルをリロードしなければならないように、それらの行に沿ってクエリ文字列値か何かを追加することです。

最終結果は次のようになりますimage.jpg?image=randomNumber

私は通常javascriptを介してこれを行い、生成ランダム番号in-javascript-in-a-specific-rangeを使用してそれを理解するのに役立てることができます。

ここで、メモとして、明確でない場合に備えて、画像タグのソースにクエリ文字列を追加するだけです。

于 2012-08-05T19:25:34.313 に答える