当前位置: 首页 > 知识库问答 >
问题:

无法捕获AWS S3异常

王念
2023-03-14

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

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

如果该项不存在,我会得到以下错误:

[2015年10月13日星期二23:03:32][错误][客户端54.225.205.152]PHP警告:找不到文件或目录:s3://mybucket/myfile.jpg在/var/www/vendor/Aws/Aws-SDK-PHP/src/Aws/S3/stream wrapper . PHP的第774行

【2015年10月13日星期二23:03:32】【错误】【客户端54.225.205.152】PHP警告:filesize():s3://mybucket/myfile的stat失败。jpg位于/var/www/api-dev/awsFunc中。第278行上的php

[2015年10月13日星期二23:03:32][错误][客户端54.225.205.152]PHP致命错误:未捕获AWS \ S3 \异常\ NoSuchKey异常:AWS错误代码:NoSuchKey,状态代码:404,AWS请求ID: 4A6F1372301D02F7,Aws错误类型:客户端,Aws错误消息:指定的键不存在。,用户代理:Aws-SDK-PHP 2/2 . 8 . 21 Guzzle/3 . 9 . 3 curl/7 . 22 . 0 PHP/5 . 3 . 10-1 Ubuntu 3 . 19 \ n在/var/www/vendor/Aws/Aws-SDK-PHP/src/Aws/Common/Exception/namespace Exception factory . PHP的第91行抛出

因此,尽管我明确地试图捕捉Aws \ S3 \ Exception \ NoSuchKeyException,但系统还是抛出了它。

更新:

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

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

我不知道为什么当我使用命名空间时,命名空间不会以“\”开头,但例外情况下它需要它。我想有人解释一下。

共有1个答案

苏鸿才
2023-03-14

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

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();
 }

祝你好运

 类似资料:
  • 所以 我有一个函数,有一个回调,所以我把它包装在一个挂起函数使用,但当它错误了,它是崩溃整个应用程序。 这里有一个概念是正在发生的事情。 2022-03-04 16:09:45.410 19289-19438/in.app.androidE/AndreidRuntime: FATAL EXCEPTION: DefaultDispatcher-Worers-3进程:in.app.android,PI

  • 我通过激发Baeldung在Spring Security页面上的防止暴力身份验证尝试,为我的登录服务实现了暴力阻止机制,如下所示: 当用户未经验证时,LoginService抛出InvalidCredentialException(),然后我试图在AuthenticationFailureListener类中捕获此异常: 当出现错误时,则登录测试服务。将调用loginFailed()方法。然而,

  • 对于我的RESTAPI,我使用jersey和ExceptionMapper来捕获全局异常。我的应用程序抛出的所有异常都运行良好,但我无法捕获jackson抛出的异常。 例如,我的一个endpoint接受包含枚举的对象。如果请求中的Json有一个不在枚举jersey中的值,则抛出此异常 尽管我创造了这个映射器 代码永远不会到达这个映射器。 为了捕捉这些异常,我们需要做些什么吗? 编辑说明:我尝试过让

  • 我无法在Spring中捕获异步方法抛出的异常。我已经编写了一个未捕获的异常处理程序来捕获,但没有成功。该应用程序将启用启动任意数量的永远运行的异步作业。我认为我的异步方法需要返回Future,以便我可以将其存储在hashmap中并检查其状态或停止作业。我也可以通过存储它来获取所有正在运行的作业。我认为我不能使用get method of Future,因为如果输入正确,它会阻塞,我的作业将永远运行

  • 问题内容: 我正在尝试捕获“ android.database.sqlite.SQLiteException:错误代码5:数据库已锁定”异常,并带有: 由于某些原因,我仍然会收到错误消息,并且LogCat中没有显示“ caught”。我尝试捕获一般的“异常”,但这仍然行不通。怎么了? 更新, 我发现了这个问题,这确实很奇怪:由于某种原因,将goto10声明的db.insert()更改为db.ins

  • 问题内容: 尽管我在日志中看到了异常,但似乎无法捕获到约束违例异常。 实体 我正试图抓住它 -它永远不会到达捕获块。 当我使用 捕获(异常e) 我捕获到“ javax.transaction.RollbackException:ARJUNA016053:无法提交事务。” 这是错误日志: 我究竟做错了什么 ? 更新>> 我当前的代码是: 日志是 环境:PostgreSQL 9.2 JBoss AS