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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:15:14