Laravel10+Filament3中Spatie媒体库上传图片404问题求助
问题解决步骤
核心原因:你执行的php artisan storage:link默认创建的软链是将public/storage指向storage/app/public,但你的图片存在storage/app/app_media目录,不在软链覆盖范围内,因此通过/storage/开头的URL访问会返回404。
解决方案一:切换到public磁盘(推荐)
修改上传组件的磁盘配置为public,文件会自动存储到storage/app/public目录,适配默认软链规则:
SpatieMediaLibraryFileUpload::make('image') ->disk('public') ->preserveFilenames(),
重新上传图片后,即可通过http://local-host.com/storage/app_media/5/wizdom.jpg正常访问。
解决方案二:为app_media目录创建独立软链
如果不想修改存储磁盘,直接给storage/app/app_media创建指向public目录的软链:
- Linux/macOS 在项目根目录执行:
ln -s ../storage/app/app_media public/app_media - Windows 命令提示符执行:
mklink /D public\app_media storage\app\app_media - Windows PowerShell执行:
New-Item -ItemType SymbolicLink -Path "public/app_media" -Target "storage/app/app_media"
完成后访问URL改为http://local-host.com/app_media/5/wizdom.jpg即可。
解决方案三:新增自定义磁盘配置
- 编辑
config/filesystems.php,在disks数组中新增app_media磁盘配置:
'app_media' => [ 'driver' => 'local', 'root' => storage_path('app/app_media'), 'url' => env('APP_URL') . '/app_media', 'visibility' => 'public', ],
- 创建对应软链:
php artisan storage:link --disk=app_media
- 修改上传组件使用该磁盘:
SpatieMediaLibraryFileUpload::make('image') ->disk('app_media') ->preserveFilenames(),
之后即可通过http://local-host.com/app_media/5/wizdom.jpg访问图片。
附加排查点
若执行php artisan storage:link后public/storage为空,大概率是软链创建失败:
- 检查服务器权限:确保web用户有创建软链的权限
- Windows环境需以管理员身份执行命令
- 共享主机环境可能不支持软链,可手动将文件上传到
public目录替代
内容的提问来源于stack exchange,提问作者Petro Gromovo
相关产品推荐
相关产品推荐

