AWS S3Client->getObject()
永遠不會返回並且如果我請求不存在的鍵時從不拋出異常。我懷疑當給定一個不存在的密鑰時,其他S3Client方法也有同樣的問題。S3Client-> GetObject()如果給定一個不存在的鍵,則永遠不會返回或拋出異常
但是,如果我將S3Client配置爲'debug' => true
,則當文件未找到時它將拋出Aws\S3\Exception\S3Exception
,這是可以接受的。
下面是測試情況下,我寫道:
protected function _test_s3_client_get($unit, $key) {
$provider = CredentialProvider::ini(NULL, APPPATH . 'config/aws.ini');
$provider = CredentialProvider::memoize($provider);
$client = new S3Client([
'region' => 'us-east-1',
'version' => '2006-03-01',
'credentials' => $provider,
// 'debug' => ['logfn' => [$this, '_noop']]
// 'debug' => true,
]);
try {
$result = $client->getObject(array(
'Bucket' => 'mybucket',
'Key'=> $key,
));
} catch (S3Exception $e) {
error_log($e);
}
$unit->run(isset($result['Body']), true, "Got $key");
}
如果'debug' => true
,該S3Client轉儲在響應龐大的數據量,無論它是否找到該文件。作爲一種解決方法,我可以設置debug
選項來調用帶有調試輸出的空函數。儘管如此,這看起來並不是永久的解決方案。
有其他人遇到過這個問題嗎?有更好的解決方法嗎?
如果沒有結果,我認爲'$ result'爲'null'是不是這種情況? – Pitchinnate
@Pitchinnate它永遠不會返回。 –
嗯,看看文檔沒有'getObject()'方法的返回錯誤。對於'GetObjectAcl()'有一個'NoSuchKey'錯誤,所以也許你可以先調用它來確保該鍵存在,然後調用'getObject()' – Pitchinnate