Mah*_*mbi 4 android amazon-s3 aws-amplify aws-amplify-cli aws-amplify-sdk-android
我想开发一个简单的 Android 应用程序来将图像文件上传到 AWS 中已创建的 S3 存储桶。如果我用谷歌搜索,所有最新的 AWS 文档都会将我重定向到使用Amplify框架。我不明白此处描述的上传文件的文档。我不明白在哪里可以提供存储桶名称、IAM 凭证等。我也没有找到任何视频教程。如果在没有提供适当文档的情况下强制使用 Amplify,为什么 AWS 会这样做呢?
在这里他们提到使用 Amplify CLI 配置所有详细信息
amplify add storage
并要求使用推送更改
amplify push
但如果我们想以编程方式添加详细信息,例如存储桶名称、用户详细信息等,那么我们该怎么做呢?给我使用 Amplify 框架或适用于 Android 的旧 AWS SDK 的分步详细信息,以便在不使用 Cognito 的情况下上传文件
有多种方法可以从 Android 设备将文件上传到 S3。这里有一些。
Amplify Android 存储类别的主要文档是在假设您将使用 Amplify CLI创建新的AWS 资源的情况下编写的。还有一些有关使用现有 S3 存储桶的注意事项。
TransferUtility如果两者都不能满足您的需求,您可以使用适用于 Android 的 AWS 开发工具包中的旧版本。下面是一个使用 的示例TransferUtility。
正如您所注意到的,上面的文档使用了AWSMobileClientAmazon 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5687 次 |
| 最近记录: |