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

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即可。

解决方案三:新增自定义磁盘配置

  1. 编辑config/filesystems.php,在disks数组中新增app_media磁盘配置:
'app_media' => [
    'driver' => 'local',
    'root' => storage_path('app/app_media'),
    'url' => env('APP_URL') . '/app_media',
    'visibility' => 'public',
],
  1. 创建对应软链:
php artisan storage:link --disk=app_media
  1. 修改上传组件使用该磁盘:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:00:14