diff --git a/weed/s3api/s3_action_resolver.go b/weed/s3api/s3_action_resolver.go index 3917c21fd..61eb739c1 100644 --- a/weed/s3api/s3_action_resolver.go +++ b/weed/s3api/s3_action_resolver.go @@ -94,15 +94,13 @@ var bucketQueryActions = map[string]map[string]string{ // resolveFromQueryParameters checks query parameters to determine specific S3 actions func resolveFromQueryParameters(query url.Values, method string, hasObject bool) string { - // Multipart upload operations - if query.Has("uploadId") && query.Has("partNumber") { - if method == http.MethodPut { - return s3_constants.S3_ACTION_UPLOAD_PART - } - } - + // Multipart upload operations with uploadId parameter if query.Has("uploadId") { switch method { + case http.MethodPut: + if query.Has("partNumber") { + return s3_constants.S3_ACTION_UPLOAD_PART + } case http.MethodPost: return s3_constants.S3_ACTION_COMPLETE_MULTIPART case http.MethodDelete: diff --git a/weed/s3api/s3api_bucket_policy_engine.go b/weed/s3api/s3api_bucket_policy_engine.go index 698b45954..278e3e1ae 100644 --- a/weed/s3api/s3api_bucket_policy_engine.go +++ b/weed/s3api/s3api_bucket_policy_engine.go @@ -146,13 +146,8 @@ func (bpe *BucketPolicyEngine) EvaluatePolicyWithContext(bucket, object, action, } // Convert action to S3 action format using request context - // ResolveS3Action already includes fallback to mapBaseActionToS3Format - var s3Action string - if r != nil { - s3Action = ResolveS3Action(r, action, bucket, object) - } else { - s3Action = mapBaseActionToS3Format(action) - } + // ResolveS3Action handles nil request internally (falls back to mapBaseActionToS3Format) + s3Action := ResolveS3Action(r, action, bucket, object) // Build resource ARN resource := buildResourceARN(bucket, object)