2017-03-02 126 views
1

目前正在使用Symfony 3應用程序。我創建了一項服務,允許用戶上傳圖片,然後選擇裁剪部分,最後保存具有特定高度和寬度的頭像。化身保存在/web/img/uploads/avatar/文件夾中。我正在使用用戶名來命名文件。因此,ID爲13的用戶將他的頭像保存在/web/img/uploads/avatar/13.pngSymfony 3 - 圖像沒有立即更新

我的問題是,當用戶更新他的頭像時,該文件在文件夾中被正確替換,但在實際網站上顯示的頭像仍舊保留舊頭像一段時間。 在開發環境中,這需要在新的頭像替換舊頭像幾分鐘之前。即使我去了頭像網址(localhost/app_dev.php/img/uploads/avatar/xxx.png),我仍然看到舊的頭像一段時間,然後它最終被新頭像取代。如預期的那樣,文件系統中的化身立即被替換掉了。

我想這可能來自緩存。我試圖在谷歌搜索解決方案,但我發現所有與LiipImagineBundle和它的緩存管理器有關,但我沒有使用這個捆綁...

我試圖刪除舊的頭像,如果它找到它的名字後,並在實際裁剪和保存圖像之前。如下。

if(file_exists($dst)) { 
    unlink($dst); 
} 

但它不起作用。完全一樣。

任何想法?

+0

它只是瀏覽器緩存 – bxN5

+0

除了告訴我的用戶「嘿,你改變了你的頭像,這很棒,現在等待一段時間,直到你的瀏覽器最終決定更新它的緩存,我會看到你的全新照片。「 ? 或者只是隨機圖像的名字我想,這樣因爲它的URL變化將每個用戶上傳一個新頭像時獲得一個新的。 – Kishlin

+0

嘗試發送您的客戶端頭(緩存控制:無緩存,必重新驗證) – bxN5

回答

2

這絕對是瀏覽器緩存,如bxN5所示。但我不同意更改標題。如果您選擇通過修改緩存標頭進行管理,這將迫使您永久刪除這些圖像上的緩存,或者讓Web瀏覽器詢問您的服務器是否修改了這些圖像(每次調用時下載的字節更少但額外請求)。

我認爲更好的方法是通過更改圖像名稱或添加查詢字符串來更改圖像url。在這兩種情況下,您都需要圖像的版本標識符。您可以使用圖像的修改日期(時間戳)。

+0

是的,我只是使用隨機名稱,這是最簡單的選擇。 – Kishlin