2013-08-07 110 views
2

我在ap-southeast-1區域創建了一個存儲區,並將ACL設置爲專用讀取。我可以使用AWS PHP SDK 2 S3Client類將文件成功上傳到存儲桶中的文件夾。不過,我還需要在我的應用程序中顯示這些文件的鏈接。因此,當用戶點擊一個按鈕時,我發送一個AJAX請求到我的服務器文件,並且我得到了通過json字符串返回給用戶的signedURL。但是,url總是返回帶有錯誤SignatureDoesNotMatch的XML。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

相關問題