Я пытаюсь получить предварительно подписанный URL к объекту Amazon S3 с помощью AWS \ S3 \ S3Client :: createPresignedRequest() метод:Amazon S3 Pre-Signed URL (AWS версия 3)
$s3 = new S3Client($config);
$command = $s3->getCommand('GetObject', array(
'Bucket' => $bucket,
'Key' => $key,
'ResponseContentDisposition'=>'attachment; filename="' . $fileName . '"',
));
$request = $s3->createPresignedRequest($command, $time);
// Get the actual presigned-url
$this->signedUrl = (string)$request->getUri();
Я получаю presigned-URL, как это:
https://s3.amazonaws.com/img/1c9a149e-57bc-11e5-9347-58743fdfa18a?X-Amz-Content-Sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=13JZVPMFV04D8A3AQPG2%2F20150910%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20150910T181455Z&X-Amz-SignedHeaders=Host&X-Amz-Expires=1200&X-Amz-Signature=0d99ae98ea13e2974322575f95f5a19e94e13dc859b2509cecc21cd41c01c65d
and this url returned error:
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
....
Этот файл отсутствует. Не существует проверки того, существует ли объект, когда создается подписанный URL-адрес. Кроме того, это ведро не настроено безопасно, и ваш список объектов общедоступен. Вероятно, вы должны удалить разрешение s3: ListObjects из политики вашего вектора. –
Я не понимаю, почему он не работает для aws версии 3, и он работает правильно для одного и того же объекта, когда я использую aws-версию 2, например: $ s3 = S3Client :: factory ($ config); $ command = $ s3-> getCommand ('GetObject', array ( 'Bucket' => $ originalBucket, 'Key' => $ key, 'ResponseContentDisposition' => 'attachment; filename = "'. $ FileN . '' ' )); $ this-> signedUrl = $ command-> createPresignedUrl ($ time); –
Вы прочитали мой предыдущий комментарий? Если ваш ведро называется «img», то этот файл не находится в вашем ковше. Если ваше ведро называется чем-то другим, попробуйте объяснить, почему имя корзины не отображается в URL-адресе. –