将文件上传到S3时出错:PutObject错误

时间:2020-07-21 18:34:22

标签: laravel amazon-web-services amazon-s3

以下是每次我尝试将图像上传到存储桶时的错误

Error executing \"PutObject\" on "https://xxxxxxbucket.s3.us-west-1.amazonaws.com/img1.png"; AWS HTTP error: cURL error 6:

(see https://curl.haxx.se/libcurl/c/libcurl-errors.html)

现在,首先,根据curl错误cURL错误6,错误的html链接显示“无法解析主机。给定的远程主机未解析。”

论坛上有关cURL错误6的每个问题大多都是由于提供了错误的“区域”名称而发生的。就我而言,这是北加州的正确“ us-west-1”。我在同一地区将其他存储桶用于其他应用程序。这是我很困惑的另一个原因。

第二,我的IAM用户有权访问该存储桶。我什至使用管理员访问密钥来查看iAM用户的策略是否存在问题。同样的错误。我还想知道权限是否有问题,那么我应该得到“禁止的错误”而不是“未解决的错误”。我将存储桶明确设置为公开,只是为了调试和出现相同的错误。

第三,我尝试了多种方式上传到s3:

//First way
$disk = Storage::disk('s3');
$disk->put($filename, file_get_contents($value -> getRealPath()));

//Second way
$client = new S3Client([
'credentials' => [
    'key'    => 'xxxxx',
    'secret' => 'xxxxxx'
],
    'region' => 'us-west-1',
    'version' => 'latest',
]);

$adapter = new AwsS3Adapter($client, 'xxxxxbucket');
$filesystem = new Filesystem($adapter);
$filesystem -> put($filename, file_get_contents($value -> getRealPath()));

最后,我在Laravel端检查了收到的文件,它们很好。

我正在本地计算机上进行测试。我将代码部署到我的beantalk环境中,以查看它是否在本地开发方面出现问题,但登台服务器也出现了同样的错误。

我可能做错了什么?

2 个答案:

答案 0 :(得分:2)

我在当地的发展案例中找到了原因。真傻看来我的mac和php cURL的cURL是不同的版本。 mac cURL是7.54.0,使用cURL的php是7.65.3

所以我卸载了最后一个cURL版本

brew uninstall curl-openssl --ignore-dependencies

并重新启动php

brew services restart php

现在一切正常。

在我提到beantalk也不起作用的情况下,它是关于代码中其他错误的愚蠢无知错误。这真的是我的失误,因为如果我在这种情况下给予更多关注,那么我本可以节省很多时间。

答案 1 :(得分:0)

我只能想到几个可能的问题

  • 来自本地:如果您落后于release(),但无法corporate proxy各自的aws主机。
  • 从已部署的beantalk中:如果您位于ping内部,并且无法直接访问其外部的主机。