Cannot catch AWS S3 exception
Solution 1
Ok so here is what worked for me:
use Aws\S3\Exception\S3Exception as S3;
try {
$podcast = $this->uploadFileToS3($request);
} catch(S3 $e) {
return $e->getMessage();
}
In my case, i passed the message to a session flash like so:
return redirect('dashboard/episode/create')->with('status', $e->getMessage());
So it all depends on how you want to use it.
try {
$fileSize = filesize("s3://".$bucket."/".$filename);
} catch(S3 $e) {
return $e->getMessage();
}
Good Luck!
Solution 2
This is the right way. 😉
use Aws\Exception\AwsException;
try{
// something
}catch(AwsException $e){
echo 'Caught exception: ', $e->getMessage(), "\n";
}
Solution 3
You can make use of AWSException
class getAwsErrorMessage()
method
So you could do
use Aws\S3\Exception\S3Exception;
try {
// Your Code
} catch (S3Exception $e) {
return $e->getAwsErrorMessage();
}
Vasilis
Updated on June 22, 2022Comments
-
Vasilis almost 2 years
I'm trying to get the filesize of an S3 object using the Stream API with the following code:
try{ $fileSize = filesize("s3://".$bucket."/".$filename); }catch(Aws\S3\Exception\NoSuchKeyException $e) { return false; }
If the key doesn't exist I get the following error:
[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
So, although I explicitly try to catch the Aws\S3\Exception\NoSuchKeyException the system throws it anyway.
UPDATE:
I found the error. The exception should namespace should start with '\' instead of Aws, like that:
try{ $fileSize = filesize("s3://".$bucket."/".$filename); }catch(\Aws\S3\Exception\NoSuchKeyException $e) { return false; }
I don't know though why when I
use
a namespace the namespace doesn't start with '\' but in the exception it needs it. I'd like someone to explain.-
Mircea over 8 yearsPossible duplicate of Handling errors in AWS PHP SDK 2
-
Vasilis over 8 yearsI don't think it's duplicate, the answers in the above question suggest to use what I'm already using but the exception isn't caught
-
-
Vasilis over 5 yearsThanks. Do you know why the namespace doesn't require to be declared in the global scope with the leading slash when using
use
, but inside thecatch
it requires the leading slash? -
Maverick over 5 yearsMaybe you haven't correctly declared the namespace in
use
line. If you did that there's non need for the leading slash incatch
. My example works without it. Read this answer maybe it can help you. ;)