0
我嘗試獲得預標識的URL使用AWS的Amazon S3的對象\ S3 \ S3Client :: createPresignedRequest()方法:亞馬遜S3預簽名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();
我得到這樣的預先登記的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中。 –