You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Blade模板中二维码图片显示异常问题求助

问题原因与解决方案

这就是浏览器缓存导致的问题:你每次生成的二维码文件名都是qr.png,浏览器首次加载后会将该文件缓存到本地。后续正常刷新页面时,浏览器检测到URL没有变化,就直接读取本地缓存的旧图,不会向服务器请求新文件;而Ctrl+F5强制刷新会跳过本地缓存,直接从服务器拉取最新文件,所以能看到新图。

下面是几种可行的解决办法:

  • 给图片URL添加动态参数
    在Blade模板里渲染图片时,给URL加上基于文件修改时间或当前时间的参数,让浏览器认为是新资源。比如用文件的修改时间(更精准,只有文件更新时参数才变):

    <img src="{{ asset('storage/' . Auth::user()->id . '/qr.png?v=' . filemtime(storage_path('app/public/' . Auth::user()->id . '/qr.png'))) }}" alt="二维码">
    

    或者简单用当前时间戳(每次刷新都会变,适合调试阶段):

    <img src="{{ asset('storage/' . Auth::user()->id . '/qr.png?v=' . time()) }}" alt="二维码">
    
  • 生成带唯一标识的文件名
    每次生成二维码时,给文件名加上随机字符串或时间戳,比如qr_{{ time() }}.png,然后将新的文件路径更新到数据库。这种方式彻底避免缓存冲突,但要记得定期清理用户目录下的旧二维码文件,防止存储冗余。

  • 服务器层面设置缓存规则
    在Nginx或Apache等服务器配置中,针对这个二维码文件设置禁止缓存或极短的缓存有效期。比如Nginx的配置示例:

    location ~* /storage/[0-9]+/qr.png {
        expires -1;
        add_header Cache-Control "no-store, no-cache, must-revalidate";
    }
    

    这样浏览器每次请求该文件时都会向服务器验证是否有更新,不会直接用本地缓存。

内容的提问来源于stack exchange,提问作者ШайтанЯкубович

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:55:19