2013-08-07 3 views
2

У меня есть ведро, созданное в регионе с юго-востоком-1, с ACL, установленным в личное чтение. Я могу успешно загружать файлы в папки внутри ведра, используя класс AWS PHP SDK 2 S3Client. Однако мне также нужно отобразить ссылку на эти файлы в моем приложении. Следовательно, когда пользователь нажимает кнопку, я отправляю запрос AJAX к моему файлу сервера, и я получаю подписанныйURL, который возвращается пользователю через строку json. Тем не менее, URL всегда возвращается с XML с ошибкой SignatureDoesNotMatch.aws s3 php sdk 2 SignatureDoesNotMatch Ошибка

Код для получения signedURL ниже:

//create the AWS reference string 
    $client = S3Client::factory(
          array(
           'key' => T_AWS_KEY, 
           'secret' => T_AWS_SECRET, 
           'region' => T_BASE_REGION 
           ) 
          ); 
    //method 1 - using Command Object 

    $command = $client->getCommand('GetObject', array(
     'Bucket' => T_BASE_BUCKET . "/" . $firmId . "/invoices" , 
     'Key' => $arr['file_reference_url'] , 
     'ResponseContentDisposition' => 'attachment;filename=' . arr['file_reference_url'] 
    )); 

    $signedUrl = $command->createPresignedUrl('+10 minutes'); 
    echo $signedUrl . "\n\n"; 

    //method 2 - using getObjectUrl 
    echo $client->getObjectUrl(T_BASE_BUCKET . "/" . $firmId . "/invoices", $arr['file_reference_url'], "+10 minutes"); 

Любая помощь приветствуется.

ответ

1

Кажется, вас могут смутить, что такое ведра. Ковши не вложены. Вероятно, значение T_BASE_BUCKET - ваше ведро, а остальные части являются частью ключа объекта. Дайте этот снимок:

$objectKey = $firmId . '/invoices/' . $arr['file_reference_url']; 
echo $client->getObjectUrl(T_BASE_BUCKET, $objectKey, '+10 minutes'); 
+0

спасибо большое! это сработало! :) – Mathai

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