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

Laravel 5.4提交图片表单出现TokenMismatchException报错求助

解决Laravel图片上传表单的TokenMismatchException问题

嘿,我之前也碰到过一模一样的情况——AJAX请求顺顺当当,结果表单提交就炸出CSRF令牌不匹配的错误,咱们来捋捋你可能漏掉的点:

  • 普通表单没手动添加CSRF令牌字段
    你页面头部的<meta name="csrf-token">能被AJAX框架(比如Axios、jQuery)自动读取并附加到请求头里,但普通HTML表单不会自动做这件事。你需要在表单内部添加一个隐藏的令牌字段,最简单的方式就是用Laravel的Blade指令:

    <form method="POST" action="/your-upload-endpoint" enctype="multipart/form-data">
        @csrf <!-- 就是这一行! -->
        <!-- 你的文件输入框和其他表单字段 -->
        <input type="file" name="image">
        <button type="submit">上传图片</button>
    </form>
    

    如果你不想用Blade指令,也可以手动写隐藏字段:

    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    
  • 表单的请求方法不对
    确认你的表单用的是method="POST"(或者PUT/PATCH/DELETE这类需要CSRF验证的方法)。如果不小心写成了GET,虽然不会触发CSRF错误,但上传文件本来就不该用GET请求,而且可能导致其他问题。

  • 忘了加文件上传的enctype属性
    上传文件的表单必须添加enctype="multipart/form-data",不然服务器没法正确解析文件数据,有时候也会连带导致CSRF令牌字段无法被正常读取。这个属性一定要放在form标签里哦。

  • 令牌过期(概率较低)
    如果页面打开很久之后才提交表单,session里的CSRF令牌可能已经过期了。试试刷新页面再重新提交,看看问题是否消失。

最常见的原因就是第一个——没给表单加@csrf指令,毕竟AJAX的自动处理会让我们忽略表单需要手动加令牌这件事。先试试这个,应该能解决问题~

内容的提问来源于stack exchange,提问作者Kavinda Prabhath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:08:21