咨询电话 15998949536
全部商品 系统软硬件运维196 平面设计/3D设计180 静态网页模板174 软件驱动下载115 成品软件65 网站建设52 虚拟主机44 资料下载39 开发日志30 AI/智能设备26 网络推广20 网络安全17 小程序/APP16 数据库16 云主机/服务器14 其他14 短信群发12 定制软件11 乐器/永川秀芽11 商标.版权.ICP8 电子合同6 域名注册/续费5 电话资源相关4 POS机办理4 企业邮局3 共享自习室3 厨师上门1 美容护肤1

Laravel上传图片404与public_storage目录联接(Junction)原理经验总结

分类:系统软硬件运维 · 商品编号:1136

¥289

参考价,最终以合同与配置单为准,可开增值税发票

交付方式 远程部署 / 本地实施
结算方式 对公转账、可签合同
服务区域 重庆本地 + 全国远程
发票 增值税普通 / 专用发票
购买说明:本站商品为产品与服务目录,不提供在线下单。确认需求后由客服出具报价单与合同,支持对公付款。
服务承诺:售前提供方案与配置建议,售后按合同约定响应。

商品详情

Laravel 上传图片成功了,数据库里也存了路径,但浏览器一访问图片直接 404 Not Found——这是 Laravel 开发者最常踩的坑之一。

01

为什么会 404

Laravel 的文件默认存储在 storage/app/public 目录下,但这个目录在 public 目录之外,Nginx/Apache 根本访问不到。上传是成功的,文件也在磁盘上,只是 Web 服务器的文档根目录里没有这个路径。

02

官方解法:storage:link

Laravel 提供了 php artisan storage:link 命令,本质是在 public 目录下创建一个叫 storage 的软链接,指向 storage/app/public。

public/storage → storage/app/public

这样访问/storage/xxx.jpg就等于访问 storage/app/public/xxx.jpg。

03

Windows 上的坑:软链接变 Junction

在 Windows 上跑 storage:link,PHP 会调用 PHP 的 symlink 函数。NTFS 不支持真正的 POSIX 软链接,所以 Laravel 用的是 Junction(目录联接)。Junction 是 NTFS 重解析点的一种,对应用层完全透明——你 cd 进去、读文件、写文件,跟操作真目录没有任何区别。

所以在 Windows 上看到 public/storage 是一个 Junction 而不是符号链接,这是正常的,不影响使用。

04

还报 404?检查这几点

① public/storage 目录是否存在?不存在就重新跑 storage:link

② config/filesystems.php 里 public disk 的 root 是否指向 storage/app/public

③ Web 服务器是否把请求转发给了 public 目录而不是项目根目录

一句话总结:上传404不是文件没存,是Web服务器找不到路径——storage:link 用 Junction 把 storage/app/public 映射到 public/storage,问题就解决了。

需要报价单、合同或上门演示?

说明需求、数量与开票要求,我们给出报价单与合同。