Laravel部署至cPanel后图片存储与调用路径不一致问题的解决咨询
嘿,这个问题我太熟悉了!很多人把Laravel项目部署到cPanel时,都会因为调整public目录结构遇到这种存储和访问路径不匹配的问题。别担心,我给你两个实用的解决方案,你选一个适合你的就行:
方案1:直接将图片存储到根目录下的专属文件夹(无需软链)
这个方法最直接,适合不想折腾软链的场景:
- 第一步,在你的项目根目录(就是现在放
index.php的那个目录)下创建一个专门存图片的文件夹,比如叫images(名字随意,只要你记得住)。 - 第二步,修改你的文件上传代码,把图片直接存到这个文件夹里。比如:
// 处理上传的图片 $image = $request->file('image'); $fileName = uniqid() . '.' . $image->getClientOriginalExtension(); // 用public_path()指向当前根目录,把文件移到images文件夹 $image->move(public_path('images'), $fileName); // 把存储路径存在数据库里,比如 'images/' . $fileName
- 第三步,在视图里调用图片时,直接用Laravel的
asset()助手函数:
<img src="{{ asset('images/' . $yourImageName) }}" alt="描述文字">
这样存储和调用都在同一个目录下,完美匹配。
方案2:修复Storage软链接(保留Laravel默认存储结构)
如果你习惯用Laravel默认的storage/app/public来存文件,那只需要修复软链接的路径就行:
- 首先确认
config/filesystems.php里的public磁盘配置是正确的:
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL') . '/storage', 'visibility' => 'public', ],
- 因为cPanel面板通常没法直接运行
php artisan storage:link命令(或者运行后路径不对),所以手动创建软链接:- 登录cPanel的文件管理器
- 找到你的项目根目录(放
index.php的目录) - 右键点击空白处,选择「创建软链接」
- 链接名称填
storage,目标路径填你的storage/app/public的绝对路径(比如/home/你的用户名/laravel项目/storage/app/public,根据你的实际目录调整)
- 上传代码用public磁盘存储:
// 把图片存储到public磁盘的images目录下 $imagePath = $request->file('image')->store('images', 'public'); // 数据库里存$imagePath即可,比如'images/xxx.jpg'
- 视图里调用还是用
asset()指向storage路径:
<img src="{{ asset('storage/' . $yourImagePath) }}" alt="描述文字">
额外注意事项
- 一定要检查
index.php里的public路径绑定是否正确,确保Laravel能识别当前根目录为public目录:
$app->bind('path.public', function() { return __DIR__; });
- 给存储图片的文件夹设置合适的权限,一般设为
755或者775就够了,千万不要用777,安全性极差。
内容的提问来源于stack exchange,提问作者Himel
相关产品推荐
相关产品推荐

