개발/AOS

안드로이드 AWS Amplify + S3에 파일 업로드 Android uploads files with AWS Amplify + S3 (3/3) S3+앱 연동

728x90

이제 S3와 앱만 연동하면 끝난다.

 

안드로이드 프로젝트에서 앱 레벨 그레들에 아래와 같이 추가한다.

 

dependencies {

...
		implementation 'com.amplifyframework:aws-storage-s3:1.6.11'
    	implementation 'com.amplifyframework:aws-auth-cognito:1.6.11'
...
    
}

 

그리고 메니페스트에 관련 퍼미션을 추가해준다.

 

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

그리고 이전글에서 생성한 클래스에 

 

       Amplify.addPlugin(AWSCognitoAuthPlugin())
       Amplify.addPlugin(AWSS3StoragePlugin()) 

 

이 두줄을 추가해준다. (S3에 접근하기 위한 Conginito와 S3 Storage Plugin)

 

class MyAmplifyApp: Application() {



    override fun onCreate() {
        super.onCreate()

        try {
            Amplify.addPlugin(AWSCognitoAuthPlugin()) // 추가
            Amplify.addPlugin(AWSS3StoragePlugin()) // 추가
            Amplify.configure(applicationContext)
            Log.i("MyAmplifyApp", "Initialized Amplify")
        } catch (error: AmplifyException) {
            Log.e("MyAmplifyApp", "Could not initialize Amplify", error)
        }
    }



}

 

그리고 가장 중요한 단계인 json 파일을 설정해줘야 한다. 경로는 아래와 같다.

 

 

amplifyconfiguration을 아래와 같이 채워준다.  비워놓은 부분은 각자 설정한 값에 맞게 채운다.

    "UserAgent": "aws-amplify-cli/2.0",
    "Version": "1.0",
    "auth": {
        "plugins": {
            "awsCognitoAuthPlugin": {
                "UserAgent": "aws-amplify-cli/0.1.0",
                "Version": "0.1.0",
                "IdentityManager": {
                    "Default": {}
                },
                "CredentialsProvider": {
                    "CognitoIdentity": {
                        "Default": {
                            "PoolId": "us-east-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                            "Region": "{리전이름 ex)us-east-2}"
                        }
                    }
                },
                "Auth": {
                    "Default": {
                        "authenticationFlowType": "USER_SRP_AUTH"
                    }
                },
                "S3TransferUtility": {
                    "Default": {
                        "Bucket": "{버킷이름}",
                        "Region": "{리전이름 ex)ap-northeast-2}"
                    }
                }
            }
        }
    },
    "storage": {
        "plugins": {
            "awsS3StoragePlugin": {
                "bucket": "{버킷이름}",
                "region": "{리전이름 ex)ap-northeast-2}",
                "defaultAccessLevel": "guest"
            }
        }
    }
}

 

 

awsconfiguration을 아래와 같이 채워준다.  비워놓은 부분은 각자 설정한 값에 맞게 채운다.

{
    "UserAgent": "aws-amplify-cli/0.1.0",
    "Version": "0.1.0",
    "IdentityManager": {
        "Default": {}
    },
    "CredentialsProvider": {
        "CognitoIdentity": {
            "Default": {
                "PoolId": "us-east-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                "Region": "{리전이름 ex)ap-northeast-2}"
            }
        }
    },
    "Auth": {
        "Default": {
            "authenticationFlowType": "USER_SRP_AUTH"
        }
    },
    "S3TransferUtility": {
        "Default": {
            "Bucket": "{버킷이름}",
			"Region": "{리전이름 ex)ap-northeast-2}"
        }
    }
}

 

 

마지막으로 간단한 텍스트 파일을 생성하여 전송하는 코드를 원하는 부분에 넣어서 테스트 해본다.

val exampleFile = File(applicationContext.filesDir, "ExampleKey")

        exampleFile.writeText("Example file contents")


        Amplify.Storage.uploadFile(
                System.currentTimeMillis().toString(),
            exampleFile,
            { result -> Log.d("MyAmplifyApp", "Successfully uploaded: " + result) },
            { error -> Log.d("MyAmplifyApp", "Upload failed", error) }
        )

 

끝.

 

샘플 코드 : github.com/minseongkimdev/Android-Amplify-Store-Simple-Sample