有多种方法可以将文件从 Android 设备上传到 S3。这里有几个。
使用 Amplify Android
Amplify Android 的存储类别的主要文档是在假设您将使用 Amplify CLI 创建新的 AWS 资源的情况下编写的。还有一些关于使用现有 S3 存储桶的注意事项。
使用适用于 Android 的 AWS 开发工具包
如果两者都不能满足您的需求,您可以使用TransferUtility
适用于 Android 的 AWS 开发工具包中的旧版本。下面是一个使用TransferUtility
.
适用于 Android 的 AWS 开发工具包,无 Cognito
正如您所注意到的,上面的文档使用AWSMobileClient
,它是 Amazon Cognito 的接口。但是,您可以使用 , 的任何实现CredentialsProvider
进行身份验证;AWSMobileClient
只是凭据提供程序的一个示例。
最简单(也是最不安全)的方法可能是使用 提供 IAM 用户的访问权限和密钥StaticCredentialsProvider
,如下所示。
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 -> { /* handle err */ }
else -> { /* handle cases... */ }
}
}
override fun onError(id: Int, ex: Exception?) { /* handle err */ }
}
transferUtility.upload(remoteBucket, remoteKey, localFile)
.setTransferListener(listener)