无法捕获AWS S3异常

Vas*_*lis 5 php exception-handling amazon-s3 amazon-web-services

我正在尝试使用Stream API使用以下代码获取S3对象的文件大小:

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

如果密钥不存在,我会收到以下错误:

[Tue Oct 13 23:03:32 2015] [错误] [客户端54.225.205.152] PHP警告:找不到文件或目录:/ var/www/vendor/aws/aws-中的s3://mybucket/myfile.jpg第774行的sdk-php/src/Aws/S3/StreamWrapper.php

[Tue Oct 13 23:03:32 2015] [错误] [客户端54.225.205.152] PHP警告:filesize():对于/ var/www/api-dev/awsFunc中的s3://mybucket/myfile.jpg,stat失败第278行.php

[Tue Oct 13 23:03:32 2015] [错误] [client 54.225.205.152] PHP致命错误:未捕获的Aws\S3\Exception\NoSuchKeyException:AWS错误代码:NoSuchKey,状态代码:404,AWS请求ID:4A6F1372301D02F7, AWS错误类型:客户端,AWS错误消息:指定的密钥不存在.,User-Agent:aws-sdk-php2/2.8.21 Guzzle/3.9.3 curl/7.22.0 PHP/5.3.10-1ubuntu3.19 \n在第91行的/var/www/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php中抛出

所以,虽然我明确地尝试捕获Aws\S3\Exception\NoSuchKeyException,但系统仍会抛出它.

更新:

我发现了错误.命名空间应该以'\'而不是Aws开头,例如:

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

我不知道为什么当我use命名空间时,命名空间不以'\'开头,但在异常中它需要它.我希望有人解释一下.

Pic*_*sma 7

好的,这就是对我有用的东西:

use Aws\S3\Exception\S3Exception as S3;


try {
    $podcast = $this->uploadFileToS3($request);
} catch(S3 $e) {
    return $e->getMessage();
 }
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我将消息传递给会话闪存,如下所示:

 return redirect('dashboard/episode/create')->with('status', $e->getMessage());
Run Code Online (Sandbox Code Playgroud)

所以这一切都取决于你想如何使用它.

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

祝好运!