2012-08-05 35 views
4

我有30張圖片,旁邊有一個上傳按鈕。使用ASP.MVC中的上傳文件更新圖像4

當您選擇新圖像並按更新時,它應刪除舊圖像並保存具有相同名稱和路徑的新圖像。

我這樣做有:

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

它的工作原理,我可以看到我的文件夾,我把所有我的圖片中的變化,但在瀏覽器中我看到了舊有形象,我需要刪除我的緩存以便查看新圖像。

有沒有什麼辦法可以更新我的圖像並顯示新圖像而不刪除瀏覽器中的緩存?

回答

2

這是您懷疑的瀏覽器緩存問題。你可以做的是在這些行上添加一個查詢字符串值,以便瀏覽器必須重新加載文件。

的最終結果將是image.jpg?image=randomNumber

我通常做這種通過JavaScript,您可以使用generating-random-numbers-in-javascript-in-a-specific-range來幫助你找出答案。

現在,只是爲了說明,您只是將查詢字符串添加到圖片標記的來源,以防萬一我不清楚。

+1

謝謝,我認爲它在工作後進行一些測試後才起作用:) – Aleks 2012-08-06 07:24:41

2

您需要更改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

+1

正確的HTTP緩存機制最好比在URL中使用隨機數字更好。得到了我的投票。 – TheNameless 2012-08-07 13:36:23