java.lang.IllegalArgumentException:无法读取S3TransferUtility请检查您的setup或awsconfiguration.json文件

时间:2018-03-23 08:18:47

标签: java android amazon-s3 aws-cognito aws-mobilehub

我尝试使用“TransferUtility”将文件上传到AWS s3存储桶,我已经在移动HUB上注册了该应用,并在文档中提到的res / raw中粘贴了'awsconfiguration.json'文件。

我收到了这个日志:

  

I / AWSMobileClient:欢迎使用AWS!您已成功连接。

当我在'onCreate()'

中调用它时
AWSMobileClient.getInstance().initialize(this).execute();

执行此代码时出现此错误

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));

错误:

  

E / AndroidRuntime:致命异常:主要                                                                              处理:xxxx.xxxxx.com,PID:28698                                                                              java.lang.IllegalArgumentException:无法读取S3TransferUtility   请检查您的设置或awsconfiguration.json文件                                                                                  在   com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility $ Builder.build(TransferUtility.java:248)

任何人都可以帮助我解决这个问题,并指导我在这里做错了什么。

您的努力真的很受欢迎。谢谢

3 个答案:

答案 0 :(得分:1)

要详细说明Karthikeyan的答案,示例awsconfiguration.json看起来像这样

{
    "Version": "1.0",
    "CredentialsProvider": {
        "CognitoIdentity": {
            "Default": {
                "PoolId": "COGNITO-IDENTITY-POOL-ID",
                "Region": "COGNITO-IDENTITY-POOL-REGION"
            }
        }
    },
    "IdentityManager" : {
      "Default" : { }
    },
    "S3TransferUtility": {
        "Default": {
            "Bucket": "S3-BUCKET-NAME",
            "Region": "S3-REGION"
        }
    }
}

我遇到的问题是,当我生成它时,awsconfiguration.json文件中不存在S3TransferUtility。原因是我有一个与移动集线器应用程序绑定的存储桶,但是,我想与现有存储桶集成。请按照以下说明将其集成到现有存储桶https://docs.aws.amazon.com/aws-mobile/latest/developerguide/how-to-integrate-an-existing-bucket.html

答案 1 :(得分:1)

确保已初始化mobileClient实例,并且配置文件在s3块中具有默认选项,然后只有您才能访问配置。

private void initializeAwsMClient() {
    AWSMobileClient.getInstance().initialize(this, awsStartupResult ->
        Timber.d("AWSMobileClient is instantiated and you are connected to AWS!"))
        .execute();
}

答案 2 :(得分:0)

您提到的错误来自此处:https://github.com/aws/aws-sdk-android/blob/master/aws-android-sdk-s3/src/main/java/com/amazonaws/mobileconnectors/s3/transferutility/TransferUtility.java#L248

此错误表示您拥有awsconfiguration.json文件,但在json文件中可能没有S3TransferUtility块。你能检查一下json文件中是否有所需的块吗?