Я пытаюсь загрузить файл в корзину Amazon S3 через заранее подписанный URL-адрес, который я получил от третьей службы. Это означает, что я не создаю этот URL. Я просмотрел документацию AWS, но не могу собрать все вместе. Вот что я имею в виду.
- presignedURL.php
- предварительно подписанный URL-адрес Amazon S3 с AWS SDK для PHP версии 3
- Загрузка объектов с использованием предварительно заданных URL-адресов
В настоящее время мой код выглядит так. Обратите внимание, что $key
- это предварительно подписанный URL.
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
use GuzzleHttp\Psr7\Stream;
use GuzzleHttp\Psr7\CachingStream;
$client = new GuzzleHttp\Client(['verify' => false ]);
$response = $client->get($image_url);
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'eu-west-1',
'signature_version' => 'v4'
)
]);
$s3->putObject([
'Bucket' => '<BUCKET NAME HERE>',
'Key' => $key,
'ContentLength' => get_headers($image_url,1)['Content-Length'],
'ContentType' => 'image/png',
'Body' => $response->getBody(),
'ACL' => 'private-write',
]);
В настоящее время я получаю эту ошибку: PHP Fatal error: Uncaught Aws\Exception\CredentialsException: Error retrieving credentials from the instance profile metadata service. (cURL error 7: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://169.254.169.254/latest/meta-data/iam/security-credentials/) in <PATH TO SITE>\vendor\aws\aws-sdk-php\src\Credentials\InstanceProfileProvider.php:242
Любая помощь горячо приветствуется.