使用TransferUtility上传AWS S3失败,提示读取S3TransferUtility异常
排查AWS TransferUtility构建失败的问题
看起来你已经完成了基础配置,但构建TransferUtility时遇到了配置读取失败的问题,我来帮你一步步排查:
1. 优先检查awsconfiguration.json的S3TransferUtility配置
这个错误提示直接指向配置文件,所以先确认你的res/raw/awsconfiguration.json里是否包含正确的S3TransferUtility节点。正确的配置应该类似这样:
{ "UserAgent": "aws-amplify-cli/2.0", "Version": "1.0", "S3TransferUtility": { "Default": { "Bucket": "你的存储桶名称", "Region": "你的存储桶所在区域(比如us-east-1、ap-southeast-1)" } } // 其他配置节点... }
- 确保Bucket名称和你要上传的目标存储桶完全一致,大小写敏感
- Region要和存储桶实际所在区域匹配,不能填错
2. 确认配置文件的格式和位置
- 检查文件是否放在
res/raw目录下,文件名必须是awsconfiguration.json(注意Android对文件名大小写敏感,不要写成AWSConfiguration.json) - 用JSON校验工具检查文件是否有语法错误,比如遗漏逗号、括号不匹配等,哪怕一个小错误都会导致配置读取失败
3. 调整AWSMobileClient的初始化时机
虽然日志显示连接成功,但同步调用execute()可能会导致初始化还未完全完成就去读取配置。建议改用异步回调的方式,确保初始化完成后再构建TransferUtility:
AWSMobileClient.getInstance().initialize(this, new Callback<UserStateDetails>() { @Override public void onResult(UserStateDetails result) { Log.i(TAG, "AWSMobileClient初始化完成"); // 在这里安全地构建TransferUtility TransferUtility transferUtility = TransferUtility.builder() .context(getApplicationContext()) .awsConfiguration(AWSMobileClient.getInstance().getConfiguration()) .s3Client(new AmazonS3Client(AWSMobileClient.getInstance().getCredentialsProvider())) .build(); // 执行上传操作 TransferObserver uploadObserver = transferUtility.upload( s3Bucket+"/"+s3Folder+"/"+fileName, new File(fileUrl)); } @Override public void onError(Exception e) { Log.e(TAG, "AWSMobileClient初始化失败", e); } });
4. 验证依赖版本一致性
检查你的build.gradle(Module级别)里的AWS相关依赖是否版本一致,避免版本不兼容导致的问题:
dependencies { // 确保这些依赖的版本号相同 implementation 'com.amazonaws:aws-android-sdk-s3:2.22.+' implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.22.+' implementation 'com.amazonaws:aws-android-sdk-transfer-utility:2.22.+' // 其他依赖... }
5. 检查权限与认证
- 确保你的IAM角色(或Cognito身份池对应的角色)拥有S3上传权限,比如
s3:PutObject权限 - 检查AndroidManifest.xml是否添加了必要的权限:
<uses-permission android:name="android.permission.INTERNET" /> <!-- 如果上传本地文件,需要读写存储权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
按照这个顺序排查,大概率能解决配置读取失败的问题。
内容的提问来源于stack exchange,提问作者Avineet Gupta
相关产品推荐
相关产品推荐

