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

Laravel使用store方法上传的图片通过符号链接访问报404如何解决

现象说明

该情况属于正常现象,不存在底层配置错误。

问题诱因

  1. Laravel 默认将非公开存储文件放在storage/app目录下,执行php artisan storage:link命令的作用是在web入口目录(项目根目录下的public文件夹)创建软链接storage,指向storage/app/public,因此文件系统路径storage/app/public/avatar/xxx.jpg对应的web访问路径为域名/storage/avatar/xxx.jpg。
  2. 你当前调用store方法时未指定存储磁盘,默认使用local磁盘,该磁盘的根目录为storage/app。传入public/avatar作为保存目录时,实际存储路径为storage/app/public/avatar/xxx.jpg,返回的路径是相对于local磁盘根目录的public/avatar/xxx.jpg,该路径是文件系统的相对路径,不能直接作为web访问路径使用。

解决方法

方法1(推荐):存储时指定public磁盘,用官方方法生成访问链接

修改存储代码,显式指定使用public磁盘存储:

$path = $request->file('avatar')->store('avatar', 'public');

此时返回的$path为avatar/xxx.jpg,需要生成前端可访问的链接时,调用Storage门面的url方法即可:

$accessUrl = Storage::url($path);
// 输出结果为 /storage/avatar/xxx.jpg,直接传给前端即可正常访问

方法2:兼容现有存储逻辑,手动替换路径前缀

如果不想修改现有存储逻辑,拿到带public/前缀的路径后,手动替换前缀生成访问路径即可:

$accessPath = str_replace('public/', 'storage/', $path);
$accessUrl = asset($accessPath);

注意事项

如果替换路径后仍出现404,可检查项目根目录下的public文件夹内是否存在正常的storage软链接:Windows环境下执行storage:link命令需要开启开发者权限,否则可能生成普通文件夹而非软链接,也会导致资源访问失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 21:36:04