有几种方法可以从Android设备上传文件到S3。以下是其中的一些方法。
使用Amplify Android
主要的Amplify Android Storage类别的文档是基于您使用Amplify CLI创建新的AWS资源的假设编写的。还有一些有关使用现有S3存储桶的注意事项。
使用AWS SDK for Android
如果以上两种方法都不符合您的需求,您可以使用AWS SDK for Android中的老版本TransferUtility
。以下是TransferUtility
的示例用法。
AWS SDK for Android, 无Cognito
如您所提到的,上述文档使用了AWSMobileClient
,它是Amazon Cognito的一个接口。但是,您可以使用CredentialsProvider
的任何实现进行身份验证;AWSMobileClient
只是证书提供者的一个示例。
最简单(也是最不安全)的方法可能是使用一个StaticCredentialsProvider
来提供IAM用户的访问密钥和秘密密钥,如下所示。
val region = Region.getRegion(Regions.US_EAST_1)
val credentials = BasicAWSCredentials(accessKey, secretKey)
val provider = StaticCredentialsProvider(credentials)
val transferUtility = TransferUtility.builder()
.context(applicationContext)
.s3Client(AmazonS3Client(provider, region))
.awsConfiguration(AWSConfiguration(applicationContext))
.build()
val listener = object: TransferListener {
override fun onProgressChanged(id: Int, curr: Long, tot: Long) {}
override fun onStateChanged(id: Int, state: TransferState?) {
when (state) {
COMPLETED -> { Log.i("Demo", "Upload succeeded.") }
FAILED -> { }
else -> { }
}
}
override fun onError(id: Int, ex: Exception?) { }
}
transferUtility.upload(remoteBucket, remoteKey, localFile)
.setTransferListener(listener)