Laravel部署Hostinger后图片无法上传至public_html文件夹
Laravel部署Hostinger后文件上传路径错误解决方法
问题分析
你的Laravel项目本地能正常上传文件到public文件夹,但部署到Hostinger后,文件未存入服务器的public_html目录,核心问题出在filesystems.php的磁盘配置与Hostinger目录结构不匹配:
- 默认磁盘为
local,其root指向项目的storage目录,导致文件直接存在storage下而非公开访问目录 public磁盘的root配置错误,storage_path('/public_html')会指向项目storage文件夹下的public_html子目录,而非Hostinger的web根目录public_html- 未正确映射Laravel的
public目录与Hostinger的public_html目录
解决方案
步骤1:调整filesystems.php磁盘配置
修改配置文件中的磁盘定义,确保路径匹配Hostinger的目录结构:
'default' => env('FILESYSTEM_DISK', 'public'), // 将默认磁盘改为public 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), // 修正local磁盘默认路径为storage/app ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), // 标准Laravel公开存储路径 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], // 保留s3相关配置... 'public_uploads' => [ 'driver' => 'local', 'root' => public_path(), // 若需直接上传到public_html,此配置生效(需确保public_path指向正确) ], ], 'links' => [ public_path('storage') => storage_path('app/public'), // 软链配置,用于访问storage/app/public下的文件 ],
步骤2:映射Laravel的public目录到Hostinger的public_html
Hostinger的web根目录是public_html,需确保Laravel的public_path()指向该目录:
- 推荐将Laravel项目核心文件放在
public_html的上级目录(避免.env等敏感文件暴露),在bootstrap/app.php末尾添加代码:
$app->bind('path.public', function() { return __DIR__.'/../public_html'; });
- 将Laravel项目
public目录下的所有文件(包括.htaccess)复制到Hostinger的public_html目录
步骤3:创建存储软链
在Hostinger的终端中运行Artisan命令,创建public_html/storage到storage/app/public的软链:
php artisan storage:link
步骤4:验证上传逻辑
确保你的文件上传代码使用正确的磁盘,例如:
// 使用public磁盘上传 $path = $request->file('file')->store('uploads', 'public'); // 或直接使用默认磁盘(已设为public) $path = $request->file('file')->store('uploads');
配置完成后,上传的文件会存入storage/app/public/uploads,通过软链public_html/storage/uploads可正常访问,完全适配Hostinger的目录结构。
内容的提问来源于stack exchange,提问作者Iscariota
相关产品推荐
相关产品推荐

