aws s3 php sdk 2 SignatureDoesNotMatch错误

时间:2013-08-07 06:06:20

标签: php sdk amazon-web-services

我在ap-southeast-1区域创建了一个存储桶,其ACL设置为private-read。我可以使用AWS PHP SDK 2 S3Client类将文件成功上传到存储桶内的文件夹。但是,我还需要在我的应用程序中显示这些文件的链接。因此,当用户单击按钮时,我向我的服务器文件发送一个AJAX请求,然后我获得了通过json字符串返回给用户的signedURL。但是,url始终返回带有错误SignatureDoesNotMatch的XML。

获取以下签名的URL的代码:

 //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 个答案:

答案 0 :(得分:1)

看起来你可能会对什么是桶感到困惑。铲斗不是嵌套的。 T_BASE_BUCKET的值可能是您的存储桶,其他部分是对象键的一部分。试一试:

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