Golang S3 SDK添加ObjectSizeGreaterThan过滤器遇MalformedXML错误
S3生命周期规则配置MalformedXML错误修复
错误原因
S3生命周期规则的Filter字段不支持直接同时指定Tag和ObjectSizeGreaterThan。当需要组合多个过滤条件时,必须通过And字段包裹这些条件,否则生成的XML不符合S3的校验规范,就会触发MalformedXML错误。
修复后的代码
把原来直接放在Filter下的Tag和ObjectSizeGreaterThan移到And字段中:
_, err = svc.PutBucketLifecycleConfiguration(&s3.PutBucketLifecycleConfigurationInput{ Bucket: aws.String(bucketName), LifecycleConfiguration: &s3.BucketLifecycleConfiguration{ Rules: []*s3.LifecycleRule{ &s3.LifecycleRule{ ID: aws.String("s3-retention-daily"), Filter: &s3.LifecycleRuleFilter{ And: &s3.LifecycleRuleAndOperator{ Tag: &s3.Tag{ Key: aws.String("retention-type-daily"), Value: aws.String("true"), }, ObjectSizeGreaterThan: aws.Int64(30720), }, }, Transitions: []*s3.Transition{ &s3.Transition{ Days: aws.Int64(30), StorageClass: aws.String(s3.TransitionStorageClassDeepArchive), }, }, Status: aws.String(s3.ExpirationStatusEnabled), }, }, }, })
验证逻辑
修改后生成的生命周期配置会将多条件过滤嵌套在And节点下,符合S3的XML Schema要求,就能正常通过接口校验了。
内容的提问来源于stack exchange,提问作者user20637560
相关产品推荐
相关产品推荐

