有多种方法可以从 Android 设备将文件上传到 S3。这里有一些。
使用 Android 放大
主要的Amplify Android 存储类别的文档 https://docs.amplify.aws/lib/storage/getting-started/q/platform/android是在假设您将创建的情况下编写的newAWS 资源,使用 Amplify CLI。还有一些注意事项使用现有的 S3 存储桶 https://docs.amplify.aws/lib/storage/existing-resources/q/platform/android.
使用适用于 Android 的 AWS 开发工具包
如果两者都不能满足您的需求,您可以使用旧的TransferUtility
来自适用于 Android 的 AWS 开发工具包。这是的一个使用示例TransferUtility https://docs.amplify.aws/sdk/storage/transfer-utility/q/platform/android#upload-a-file.
适用于 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)