Laravel 8对接Backblaze B2时出现CURL无法解析主机错误如何解决
问题解决办法
错误根因
你遇到的主机解析报错由两个常见配置错误共同导致:
- Laravel默认S3驱动采用虚拟主机风格的桶寻址规则,会自动将桶名拼接到Endpoint域名前缀,而Backblaze B2的S3兼容API要求使用路径风格寻址
- 你的
AWS_ENDPOINT配置缺失https://协议头,导致域名拼接规则异常
修复步骤
- 修正
.env配置项,补充协议头并新增路径寻址开关
AWS_ACCESS_KEY_ID=key1 AWS_SECRET_ACCESS_KEY=key2 AWS_DEFAULT_REGION=us-west-001 AWS_BUCKET=bucketname # 补充https协议头 AWS_ENDPOINT=https://s3.us-west-001.backblazeb2.com # 新增路径风格寻址配置 AWS_USE_PATH_STYLE_ENDPOINT=true
- 检查
config/filesystems.php中的s3磁盘配置,确保已经引入新增的配置项:
'disks' => [ 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'endpoint' => env('AWS_ENDPOINT'), // 新增这一行,开启路径风格寻址 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), ], ]
- 清除Laravel配置缓存,确保修改生效:
php artisan config:clear
- (可选)优化上传代码,如果你直接传入目录路径作为第一个参数,Laravel会自动用文件的哈希名作为存储文件名,也可以主动指定避免歧义:
Storage::disk('s3')->put( 'images/covers/' . $request->file('thumbnail')->hashName(), $request->file('thumbnail') );
内容的提问来源于stack exchange,提问作者TheDizzle
相关产品推荐
相关产品推荐

