我正在尝试使用Stream API使用以下代码获取S3对象的文件大小:
try{
$fileSize = filesize("s3://".$bucket."/".$filename);
}catch(Aws\S3\Exception\NoSuchKeyException $e) {
return false;
}
如果密钥不存在,我会收到以下错误:
[Tue Oct 13 23:03:32 2015] [错误] [客户端54.225.205.152] PHP警告:找不到文件或目录:/ var / www / vendor / aws中的s3://mybucket/myfile.jpg第774行的/aws-sdk-php/src/Aws/S3/StreamWrapper.php
[Tue Oct 13 23:03:32 2015] [错误] [客户端54.225.205.152] PHP警告:filesize():对于/ var / www / api-中的s3://mybucket/myfile.jpg,stat失败第278行的dev / awsFunc.php
[Tue Oct 13 23:03:32 2015] [error] [client 54.225.205.152] PHP致命错误:未捕获的Aws \ S3 \ Exception \ NoSuchKeyException:AWS错误代码:NoSuchKey,状态代码:404,AWS Request ID :4A6F1372301D02F7,AWS错误类型:客户端,AWS错误消息:指定的密钥不存在。,User-Agent:aws-sdk-php2 / 2.8.21 Guzzle / 3.9.3 curl / 7.22.0 PHP / 5.3.10-第91行的/var/www/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php中引用了1ubuntu3.19 \ n
所以,虽然我明确地尝试捕获Aws \ S3 \ Exception \ NoSuchKeyException,但系统仍会抛出它。
更新
我发现了错误。命名空间应该以'\'而不是Aws开头,例如:
try{
$fileSize = filesize("s3://".$bucket."/".$filename);
}catch(\Aws\S3\Exception\NoSuchKeyException $e) {
return false;
}
我不知道为什么当我use
命名空间时,命名空间不以'\'开头,但在异常中它需要它。我希望有人解释。
答案 0 :(得分:7)
好的,这就是对我有用的东西:
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();
}
祝你好运!
答案 1 :(得分:2)
这是正确的方法。
use Aws\Exception\AwsException;
try{
// something
}catch(AwsException $e){
echo 'Caught exception: ', $e->getMessage(), "\n";
}
答案 2 :(得分:1)
您可以使用AWSException
类getAwsErrorMessage()
方法
所以你可以做
use Aws\S3\Exception\S3Exception;
try {
// Your Code
} catch (S3Exception $e) {
return $e->getAwsErrorMessage();
}