2017-03-02 63 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