大家好,
我使用AWS S3 SDK 2.2.8将图像上传到S3。我创造了 在S3控制台中铲斗。
我使用以下代码段代码上传文件。
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 +(服务: AmazonCognitoIdentity;状态代码:400;错误代码: ValidationException;请求ID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)
但是当我使用旧的AWS SDK时,我可以将文件上传到S3。
答案 0 :(得分:1)
帐户ID仅包含数字。请删除破折号。
另一方面,CognitoCachingCredentialsProvider
不再需要您的帐户ID。它有一个简化的构造函数,只接受您的Cognito池ID和区域。有关详细信息,请参阅此博客Sync store access and simplified credentials provider。
答案 1 :(得分:0)
在服务构造函数中将 null 作为 accountId 传递