You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:45:47