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

Laravel图片上传本地正常、虚拟主机失效问题求助

Laravel图片上传在虚拟主机失败的解决方案

咱们先把问题根源说透:你本地用的是Laravel标准目录结构,public文件夹和项目根目录同级,但虚拟主机把Laravel的核心代码放到了Project文件夹,public单独拆成了根目录下的public_html——这就导致控制器里原本写的路径,在虚拟主机上找不到正确的文件夹了,自然上传失败。

下面给你几个针对性的解决步骤:

1. 修正文件系统配置

打开config/filesystems.php,找到public磁盘的配置项,把root路径改成指向虚拟主机的public_html目录:

'public' => [
    'driver' => 'local',
    'root' => base_path('../public_html/storage'), // 从Project目录向上一级定位到public_html
    'url' => env('APP_URL').'/storage',
    'visibility' => 'public',
],

这样Laravel的公共存储目录就会正确指向public_html/storage,而不是本地默认的public/storage。

2. 调整控制器里的上传代码

如果你的控制器里直接用了public_path()这类路径函数,现在得改成适配虚拟主机的写法:

  • 本地原来的写法(虚拟主机失效):
    $uploadPath = public_path('images');
    $request->file('image')->move($uploadPath, $filename);
    
  • 改成适配虚拟主机的写法:
    // 通过base_path定位到public_html下的images文件夹
    $uploadPath = base_path('../public_html/images');
    $request->file('image')->move($uploadPath, $filename);
    

更推荐用Laravel的存储系统,灵活性更强,不管目录结构怎么变,只要配置正确就没问题:

// 直接指定存储到public磁盘的images目录
$path = $request->file('image')->storeAs('images', $filename, 'public');

3. 处理存储符号链接(可选)

本地我们会用php artisan storage:link创建符号链接,但虚拟主机里这个命令会生成错误的链接。你可以:

  • 手动在虚拟主机的public_html目录下创建符号链接,指向../Project/storage/app/public(具体路径根据你的虚拟主机结构微调);
  • 或者如果虚拟主机允许执行 artisan 命令,修改完配置后重新执行php artisan storage:link。

4. 检查文件夹权限

最后别忘了确认public_html/images和public_html/storage文件夹有可写权限,一般设置为755就够了(如果还是不行可以临时设为777,功能正常后建议改回755保证安全)。

试完这些步骤,你可以上传一张测试图,然后去public_html/images或者public_html/storage/images目录下看看文件有没有成功生成,验证路径是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:31:09