2015-10-13 81 views
2

我試圖使用Stream API用下面的代碼來獲得一個S3對象的文件大小:不能趕上AWS S3例外

try{ 
    $fileSize = filesize("s3://".$bucket."/".$filename); 
}catch(Aws\S3\Exception\NoSuchKeyException $e) { 
    return false; 
} 

如果該鍵不存在,我得到以下錯誤:

[Tue Oct 13 23:03:32 2015] [error] [client 54.225.205.152] PHP Warning: File or directory not found: s3://mybucket/myfile.jpg in /var/www/vendor/aws/aws-sdk-php/src/Aws/S3/StreamWrapper.php on line 774

[Tue Oct 13 23:03:32 2015] [error] [client 54.225.205.152] PHP Warning: filesize(): stat failed for s3://mybucket/myfile.jpg in /var/www/api-dev/awsFunc.php on line 278

[Tue Oct 13 23:03:32 2015] [error] [client 54.225.205.152] PHP Fatal error: Uncaught Aws\S3\Exception\NoSuchKeyException: AWS Error Code: NoSuchKey, Status Code: 404, AWS Request ID: 4A6F1372301D02F7, AWS Error Type: client, AWS Error Message: The specified key does not exist., User-Agent: aws-sdk-php2/2.8.21 Guzzle/3.9.3 curl/7.22.0 PHP/5.3.10-1ubuntu3.19\n thrown in /var/www/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php on line 91

所以,雖然我明確地試圖趕上AWS \ S3 \異常\ NoSuchKeyException系統拋出也無妨。

UPDATE:

我發現的錯誤。異常應該命名空間應該以「\」,而不是AWS的,這樣的:

try{ 
    $fileSize = filesize("s3://".$bucket."/".$filename); 
}catch(\Aws\S3\Exception\NoSuchKeyException $e) { 
    return false; 
} 

我不知道爲什麼,雖然我use命名空間的命名空間不以「\」,但在異常啓動它需要它。我希望有人解釋。

+0

[處理AWS PHP SDK 2中的錯誤]可能的重複(http://stackoverflow.com/questions/15918746/handling-errors-in-aws-php-sdk-2) – Mircea

+0

我不認爲它是重複的,上述問題中的答案建議使用我已經使用的東西,但是沒有發現異常 – Vasilis

回答

2

好了,所以這裏是我工作:

use Aws\S3\Exception\S3Exception as S3; 


try { 
    $podcast = $this->uploadFileToS3($request); 
} catch(S3 $e) { 
    return $e->getMessage(); 
} 

就我而言,我通過郵件會話閃光,像這樣:

return redirect('dashboard/episode/create')->with('status', $e->getMessage()); 

因此,一切都取決於你怎麼想使用它。

try { 
    $fileSize = filesize("s3://".$bucket."/".$filename); 
} catch(S3 $e) { 
    return $e->getMessage(); 
} 

祝你好運!