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

AWS S3 accountId未能满足约束:错误代码400 ValidationException

舒永嘉
2023-03-14

嗨大家好,

我正在使用AWS S3 SDK 2.2.8将图像上载到S3。我已经在S3控制台中创建了Bucket。

我使用以下代码段上传文件。

String AWS_ACC_ID="XXXX-XXXX-XXX";
String AWS_POOL_ID="us-east-1:XXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX";
String AWS_UNAUTH_ROLE="arn:aws:iam:XXXXXXX";
String AWS_AUTH_ROLE="arn:aws:iam:XXXXXXX";   

AWSCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                            context, AWS_ACC_ID,
                            AWS_POOL_ID, AWS_UNAUTH_ROLE,
                            AWS_AUTH_ROLE, Regions.US_EAST_1);        

AmazonS3 s3Client = new AmazonS3Client(credentialsProvider);

PutObjectRequest putRequest = new PutObjectRequest(
                        AwsCredentials.AWS_BUCKET_NAME,
                        folderPath + file.getName(), file)
                        .withCannedAcl(CannedAccessControlList.PublicRead);

s3Client.putObject(putRequest);

我遇到了以下异常:

com.amazonaws.AmazonServiceException:检测到1个验证错误:“accountId”处的值“XXXX-XXXX-XXXX”未能满足约束:成员必须满足正则表达式模式:\d(服务:AmazonCongnitoIdentity;状态代码:400;错误代码:ValidationException;请求ID:XXXXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)

但是当我使用旧的AWS SDK时,我可以将文件上传到S3。

共有2个答案

单于季
2023-03-14

只需在服务构造函数中将null作为accountId传递

齐胜涝
2023-03-14

帐户id仅由数字组成。请去掉破折号。

另一方面,CognitoCachingCre的提供者不再需要您的帐户ID。它有一个简化的构造函数,它只接受你的Cognito池id和区域。有关更多详细信息,请参阅此博客同步存储访问和简化凭据提供程序。

 类似资料:
  • 我正在创建一个AWS CodePipeline资源与terraform: 运行时,在它返回 编辑: 新的部署阶段是: 我有这个应用程序创建使用: 组使用:

  • 我正在尝试使用AWS CDK创建AWS用户池客户端。我正在使用python代码进行此操作。下面是我的代码- 我已经尝试了不同的选项,作为"TOKEN","令牌","代码","代码","代码"。它仍然不起作用。对于上面的代码,我得到下面的错误- 我不知道这里出了什么问题。我引用此链接是为了:https://docs.aws.amazon.com/AWSCloudFormation/latest/Us

  • 我正在使用Eclipse for Java和AWS工具包。我运行以下代码: 我在控制台视图中看到: […{Name:Name,AttributeDataType:String,DeveloperOnlyAttribute:false,Mutable:true,Required:false,StringAttributeConstraints:{MinLength:0,MaxLength:2048}

  • 我是新的Cognito。我试图使用Lambda实现AWS Cognito。这是我正在遵循的教程。 这是我在setIdtyPoolId中使用的池ID 这是JUnit测试 这是输出 但是我得到以下错误,因此,语句失败

  • 我正在使用aws api gateway cli测试来测试api网关。API通过cognito用户池进行身份验证,我得到错误: 我不确定要使用哪个值来标识PoolId。我在哪里可以得到这些信息。 尝试类似ARN的失败。格式为的池Id也失败。 示例用法: 导致 根据:https://github.com/AnomalyInnovations/aws-api-gateway-cli-test

  • 尝试将流数据从MYSQL迁移到Kinesis时出错。帮我修一下。 botocore.exceptions.ClientError:调用PutRecord操作时发生错误(ValidationException):检测到1个验证错误:“streamName”处的值“”未能满足约束:成员必须满足正则表达式模式:[a-zA-Z0-9.-]