Laravel 12+Filament+Spatie媒体库上传时CORS缺失AllowOriginHeader问题
解决Filament+Spatie媒体库上传图片CORS错误(MissingAllowOriginalHeader)的思路
1. 修正CORS配置的路径范围
你的config/cors.php中paths仅包含api/*,但Filament的上传请求、Spatie媒体库的图片访问路径(如/storage/...)不在该范围内,导致CORS中间件未生效。修改paths为:
'paths' => ['api/*', 'filament/*', 'storage/*'],
测试阶段可临时用['*'],生产环境按需缩小范围。
2. 确认Kernel.php的中间件配置
新建的app/Http/Kernel.php需确保web和api中间件组都加入Laravel内置CORS中间件:
protected $middlewareGroups = [ 'web' => [ // 其他原有中间件 \Illuminate\Http\Middleware\HandleCors::class, ], 'api' => [ // 其他原有中间件 \Illuminate\Http\Middleware\HandleCors::class, ], ];
3. 给静态存储文件添加CORS响应头(核心)
图片最终存在public/storage,访问时走web服务器静态文件路由,Laravel中间件无法处理这类请求,需在web服务器层面配置:
Nginx配置
在站点配置中添加:
location /storage { add_header Access-Control-Allow-Origin "*"; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; add_header Access-Control-Allow-Headers "Content-Type"; }
Apache配置
在项目根目录.htaccess中添加:
<IfModule mod_headers.c> <Directory "/path/to/your/project/public/storage"> Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "GET, POST, OPTIONS" Header set Access-Control-Allow-Headers "Content-Type" </Directory> </IfModule>
4. 适配Filament自定义路由前缀
若Filament使用了自定义路由前缀(如admin),需在cors.php的paths中加入对应前缀,比如admin/*。
5. 清除缓存并重启服务
修改配置后执行缓存清理:
php artisan config:clear php artisan cache:clear
重启web服务器(Nginx/Apache)和Laravel开发服务(若用php artisan serve)。
6. 验证Spatie媒体库磁盘配置
确认config/filesystems.php中public磁盘的url配置正确,且已执行php artisan storage:link创建软链接。
内容的提问来源于stack exchange,提问作者Stefano Dilda
相关产品推荐
相关产品推荐

