Laravel上传文件至DigitalOcean Spaces遇Endpoints格式错误求助
解决Laravel上传DigitalOcean Spaces时的"Endpoints must be full URIs and include a scheme and host"错误
这个报错我之前帮朋友排查过,核心问题就是你的config/filesystems.php里的DigitalOcean Spaces配置不完整,尤其是endpoint必须是带协议(https://)的完整域名。咱们一步步来修复:
1. 补全config/filesystems.php中的完整配置
你目前的配置只写了一部分,需要补充endpoint、region、bucket等关键参数,完整的do_spaces配置应该是这样的:
'do_spaces' => [ 'driver' => 's3', 'key' => env('DO_SPACES_KEY'), 'secret' => env('DO_SPACES_SECRET'), 'endpoint' => env('DO_SPACES_ENDPOINT'), // 必须是完整URI 'region' => env('DO_SPACES_REGION'), 'bucket' => env('DO_SPACES_BUCKET'), 'url' => env('DO_SPACES_URL'), // 可选,用于生成公共访问链接 'visibility' => 'public', // 如果需要公共访问的话设置这个 ],
2. 在.env文件中配置正确的环境变量
注意DO_SPACES_ENDPOINT必须是带https://的完整地址,比如你的空间在纽约区域,endpoint就是https://nyc3.digitaloceanspaces.com,示例如下:
DO_SPACES_KEY=你的DigitalOcean Spaces访问密钥 DO_SPACES_SECRET=你的DigitalOcean Spaces密钥密码 DO_SPACES_ENDPOINT=https://nyc3.digitaloceanspaces.com # 替换成你的空间所在区域的endpoint DO_SPACES_REGION=nyc3 # 对应区域代码 DO_SPACES_BUCKET=你的空间名称 DO_SPACES_URL=https://你的空间名称.nyc3.digitaloceanspaces.com # 可选,公共访问地址
3. 清除配置缓存并测试
配置完成后,先清除Laravel的配置缓存,避免旧配置干扰:
php artisan config:clear
然后可以用一段简单的代码测试上传,比如在控制器里:
use Illuminate\Support\Facades\Storage; public function testUpload() { $file = request()->file('your_file_input'); if ($file) { $path = Storage::disk('do_spaces')->put('uploads', $file); dd('上传成功,路径:' . $path); } dd('请选择文件'); }
额外排查点
- 确认你的DigitalOcean Spaces密钥拥有正确的权限(至少有写入权限)
- 如果你用的是较新版本的Laravel,确保
league/flysystem-aws-s3-v3包已经安装(Laravel通常默认包含,但如果缺失可以运行composer require league/flysystem-aws-s3-v3)
内容的提问来源于stack exchange,提问作者Hamid Hosseini
相关产品推荐
相关产品推荐

