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

如何将Web应用上传的文件存储到另一台指定主机?

解决方案

$file->move() 是操作当前部署服务器本地文件系统的方法,仅支持传入本地磁盘绝对/相对路径,无法直接识别远程HTTP域名地址,因此你直接填写abc.host.net无法生效。

以下是可落地的实现方案:

方案1:两台站点部署在同一台服务器

直接使用目标站点abc.host.net的file目录在服务器上的绝对路径即可:

  • 先获取abc.host.net站点根目录对应的服务器绝对路径,举例为 /www/wwwroot/abc.host.net
  • 修改上传代码为:
// 路径替换为你实际服务器上abc.host.net的file目录绝对路径
$file->move('/www/wwwroot/abc.host.net/file', $fileName);
  • 注意:需要保证当前应用运行的进程账号对目标目录有读写权限

方案2:两台站点部署在不同服务器(SFTP/FTP方式)

在abc.host.net所在服务器开通SFTP/FTP服务后,在你的应用中配置远程磁盘实现上传:

  1. 打开Laravel项目的config/filesystems.php,新增远程磁盘配置:
'disks' => [
    // 保留原有其他磁盘配置
    'remote_abc' => [
        'driver' => 'sftp',
        'host' => 'abc.host.net',
        'username' => '你的SFTP账号',
        'password' => '你的SFTP密码',
        'root' => '/www/wwwroot/abc.host.net/file', // 替换为远程服务器file目录绝对路径
        'port' => 22,
        'timeout' => 30,
    ],
]
  1. 修改上传逻辑,使用Storage门面操作远程磁盘:
use Illuminate\Support\Facades\Storage;

Storage::disk('remote_abc')->put($fileName, file_get_contents($file->getRealPath()));

方案3:两台站点部署在不同服务器(接口中转方式)

如果无法获取远程服务器的SFTP/FTP权限,可以在abc.host.net侧开发一个上传接收接口,当前应用上传文件时,将文件通过POST请求发送到该接口,由目标侧接口完成本地存储即可。

注意事项

  • 上传完成后,文件访问地址直接使用https://abc.host.net/file/拼接文件名即可
  • 所有方案都需要做好上传文件的后缀、MIME类型、大小校验,避免恶意文件上传漏洞

内容的提问来源于stack exchange,提问作者pl-jay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:06:09