应用迁移至服务器后上传文件保存路径异常如何解决
路径正确性说明
你当前文件存储到storage/app/public/images是完全正确的,符合Laravel框架默认的公开文件存储规则,你的存储代码逻辑没有问题。
路径差异原因解释
- 你调用
store('images', 'public')时指定了使用public存储磁盘,Laravel默认配置下,public磁盘的物理存储根路径就是storage/app/public,所以文件会被写入该目录下的images文件夹。 - 你之前看到的
public/storage/images并不是实际的物理存储目录,而是storage/app/public目录的软链接映射:Laravel为了兼顾文件管理安全和公开访问需求,设计了软链接机制,将public/storage指向storage/app/public,外部访问/storage/xxx路径时,会映射读取storage/app/public下的对应文件。 - 迁移服务器后路径看起来不一致,是因为你新服务器上还没有执行生成软链接的命令,本地开发时你应该已经执行过对应命令,所以之前能直接在
public/storage下看到映射的文件。
修复步骤
- 登录服务器进入项目根目录,执行命令生成软链接:
php artisan storage:link
执行后就会在public目录下生成storage软链接,和你本地开发时的目录表现一致。
2. 检查目录权限:确保web运行用户(比如www-data、nginx)拥有storage目录和public目录的读写权限,避免软链接生成失败或者文件写入报错。
3. 修复表单隐藏bug:你当前的表单代码中,@error监听的字段名是photo_parch,但文件上传框的name属性是photo_patch,拼写不一致会导致上传错误时无法正常展示提示信息,修改为一致即可。
补充说明
后续访问上传的图片时,使用asset('storage/'.$event->photo_patch)方法生成访问链接即可正常加载图片,不需要修改现有存储逻辑。
内容的提问来源于stack exchange,提问作者Michó
相关产品推荐
相关产品推荐

