2015-05-29 3 views
7

По этой ссылке http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html, я могу легко создать presigned ссылку просто добавив срок службы до getObjectUrlСоздание амазонки AWS s3 предварительно подписали URL PHP

$signedUrl = $client->getObjectUrl($bucket, 'data.txt', '+10 minutes'); 
// > https://my-bucket.s3.amazonaws.com/data.txt?AWSAccessKeyId=[...]&Expires=[...]&Signature=[...] 

Но я простой URL, вы знаете, без awsaccesskeyid и истекает параметры,

Вот мой код:

$bucket = 'imagenesfc'; 
$keyname = 'NASimagenes/codigoBarraBoleto/1001000098.png'; 
$filepath = 'NASimagenes/codigoBarraBoleto'; 

// Instantiate the client. 
$s3 = S3Client::factory(array(
    'version' => 'latest', 
    'region' => 'us-west-1' 
)); 
$signedUrl = $s3->getObjectUrl($bucket, $keyname,'+10 minutes'); 
// > https://my-bucket.s3.amazonaws.com/data.txt?AWSAccessKeyId=[...]&Expires=[...]&Signature=[...] 
echo $signedUrl."<br>"; 

EDIT: Я AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY, как Переменные окружения

Мое эхо выглядит следующим образом:

https://s3-us-west-1.amazonaws.com/imagenesfc/NASimagenes/codigoBarraBoleto/1001000098.png

Что случилось?

+0

Где вы проходя ключ и секрет АМС, который будет использоваться в подписи process? –

+0

Они заданы как переменные окружения. – Lauro182

ответ

17

Ну, если у кого-то еще есть проблемы с этим, как я, вот ответ, я зашел на форумы развития амазонки php и получил помощь от профессионалов.

Кажется, что вы можете переключаться между версией 2 и версией 3 SDK или смотреть на неправильный документ. Убедитесь, что вы получаете тот, который собираетесь использовать, и смотрите правильную документацию. Они разные.

V3 - композитор Требования: { "AWS/AWS-СДК-PHP": "~ 3,0"} - Руководство пользователя: http://docs.aws.amazon.com/aws-sdk-php/v3/guide/index.html - API Docs: http://docs.aws.amazon.com/aws-sdk-php/v3/api/index.html - Pre-подписанный URL Docs: http://docs.aws.amazon.com/aws-sdk-php/v3/guide/service/s3-presigned-url.html

V2 - композитор Требование: { "AWS/AWS-СДК-PHP": "~ 2,8"} - Руководство пользователя: http://docs.aws.amazon.com/aws-sdk-php/v2/guide/index.html - API Docs: http://docs.aws.amazon.com/aws-sdk-php/v2/api/index.html - Pre-подписанный URL Docs: http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html#creating-a-pre-signed-url

Mini шаг за шагом руководство о том, что вы должны сделать:

1.Install композитор, предпочтительно с использованием Sudo:

sudo curl -sS https://getcomposer.org/installer | sudo php 

2.Go в папку проекта и создать composer.json файл, с нужной вам версией, вы можете найти здесь: https://github.com/aws/aws-sdk-php/releases, команды для каждой версии кажутся очень специфичными для версии, будьте осторожны, это была моя главная проблема.

{ 
    "require": { 
     "aws/aws-sdk-php": "~3.0" 
    } 

}

3.Then перейти в папку проекта в терминале, и установить с помощью SDK композитора и обновления позже, как: (. Если вы измените версию, вы должны снова обновить)

sudo php composer.phar install 
    sudo php composer.phar update 

4. Затем все готово для вас, чтобы следовать надлежащей документации по версии, в моем случае для версии «aws/aws-sdk-php»: «~ 3.0" и presigned URL, что сработало было:.

require 'vendor/autoload.php'; 
    use Aws\S3\S3Client; 
    use Aws\S3\Exception\S3Exception; 

    $sharedConfig = [ 
     'region' => 'us-west-1', 
     'version' => 'latest' 
    ]; //I have AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY as environment variables 

    $s3Client = new Aws\S3\S3Client($sharedConfig); 

    $cmd = $s3Client->getCommand('GetObject', [ 
     'Bucket' => $bucket, 
     'Key' => $keyname 
    ]); 

    $request = $s3Client->createPresignedRequest($cmd, '+20 minutes'); 
    $presignedUrl = (string) $request->getUri(); 
    echo $presignedUrl; 

Я надеюсь, что это помогает любому сталкивается с теми же проблемами, как и я

+0

Здесь +20 минут. Есть ли ограничение на минимальное время? Я пробую +3 секунды, срок истекает более 10 секунд. –

+0

Документация ничего не говорит о лимитах ", время истечения URL-адреса. Это может быть временная метка Unix, объект PHP DateTime или строка, которая может быть оценена strtotime(). "Http://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws .S3.S3Client.html # _createPresignedRequest – Lauro182

Смежные вопросы