From 28b48736af37f2c3f8b6a365c8dd1c2afc9d3594 Mon Sep 17 00:00:00 2001 From: zetaloop Date: Sun, 5 Apr 2026 19:23:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=96=87=E4=BB=B6=E4=B8=8D=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E6=97=B6=E6=8F=90=E4=BE=9B=E6=8A=A5=E9=94=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getFileUrlLogic 捕获 S3 NotFound 返回语义明确的错误信息, getFileLogic 将 gRPC 错误转为普通 error 避免 HTTP 500。 --- app/objectstory/api/internal/logic/file/getFileLogic.go | 3 ++- app/objectstory/rpc/internal/logic/getFileUrlLogic.go | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/objectstory/api/internal/logic/file/getFileLogic.go b/app/objectstory/api/internal/logic/file/getFileLogic.go index 9688dac..c4b31c8 100644 --- a/app/objectstory/api/internal/logic/file/getFileLogic.go +++ b/app/objectstory/api/internal/logic/file/getFileLogic.go @@ -14,6 +14,7 @@ import ( "juwan-backend/common/utils/contextj" "github.com/zeromicro/go-zero/core/logx" + "google.golang.org/grpc/status" ) type GetFileLogic struct { @@ -46,7 +47,7 @@ func (l *GetFileLogic) GetFile(req *types.GetFileReq) (string, error) { UserId: strconv.FormatInt(userID, 10), }) if err != nil { - return "", err + return "", errors.New(status.Convert(err).Message()) } if rpcResp.GetUrl() == "" { return "", errors.New("file url is empty") diff --git a/app/objectstory/rpc/internal/logic/getFileUrlLogic.go b/app/objectstory/rpc/internal/logic/getFileUrlLogic.go index 97c9ddd..c28fd85 100644 --- a/app/objectstory/rpc/internal/logic/getFileUrlLogic.go +++ b/app/objectstory/rpc/internal/logic/getFileUrlLogic.go @@ -9,6 +9,7 @@ import ( "juwan-backend/app/objectstory/rpc/pb" "github.com/aws/aws-sdk-go-v2/service/s3" + s3types "github.com/aws/aws-sdk-go-v2/service/s3/types" "github.com/zeromicro/go-zero/core/logx" ) @@ -37,6 +38,10 @@ func (l *GetFileUrlLogic) GetFileUrl(in *pb.GetFileUrlReq) (*pb.GetFileUrlResp, Key: &in.FileId, }) if err != nil { + var nf *s3types.NotFound + if errors.As(err, &nf) { + return nil, errors.New("file not found") + } return nil, err }