缺少必需的客户端配置选项:区域

Emp*_*ata 6 php amazon-s3 amazon-web-services

我正在尝试使用以下代码检查 Amazon S3 上的存储桶是否存在:

$credentials = new Aws\Common\Credentials\Credentials($creds['access_key_id'], $creds['secret_access_key']);
$client = Aws\S3\S3Client::factory(array( 'credentials' => $credentials ) );
if( ! $client->doesBucketExist($creds['bucket']) ) {
    throw new Exception("Bucket (" . $creds['bucket'] . ") does not exist.");
}
Run Code Online (Sandbox Code Playgroud)

它在 localhost (wamp) 上工作,但是当我在服务器上尝试它时它不起作用。我收到以下错误:

缺少必需的客户端配置选项:区域:(字符串)“s3”服务需要“区域”配置值(例如,“us-west-2”)。可以在http://docs.aws.amazon.com/general/latest/gr/rande.html上找到可用公共区域和端点的列表. 版本:(字符串)需要“版本”配置值。指定版本约束可确保您的代码不会受到对服务所做的重大更改的影响。例如,在使用 Amazon S3 时,您可以将 API 版本锁定为“2006-03-01”。您的 SDK 版本具有以下“s3”版本: *“2006-03-01” 您可以为“版本”配置值提供“最新”以利用您客户端 API 的最新可用 API 版本供应商可以找到。注意:不建议在生产应用程序中使用“最新”。可以在每个客户端的 API 文档页面上找到可用 API 版本的列表:http : //docs.aws.amazon.com/aws-sdk-php/v3/api/index.html

我不知道为什么它不能在服务器上运行,但相同的代码在 localhost 上运行。

Yev*_*yev 7

我遇到了同样的问题,我需要清除我的配置缓存来修复它。

$ artisan config:clear
Run Code Online (Sandbox Code Playgroud)


RaG*_*aGe 3

创建 s3 客户端时显式设置区域,而不是依赖默认值。

use Aws\Credentials\Credentials;
use Aws\S3\S3Client;

$result = $stsClient->getSessionToken();

$credentials = new Credentials(
    $result['Credentials']['AccessKeyId'],
    $result['Credentials']['SecretAccessKey'],
    $result['Credentials']['SessionToken']
);

$s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' => $credentials
]);
Run Code Online (Sandbox Code Playgroud)