Android-Amplify:使用 Amplify 将文件上传到 AWS S3/从 AWS S3 下载文件

2024-04-26

我想开发一个简单的 Android 应用程序来将图像文件上传到 AWS 中已创建的 S3 存储桶。如果我用谷歌搜索,所有最新的AWS文档都会将我重定向到使用Amplify https://docs.amplify.aws/lib/restapi/getting-started/q/platform/android框架。我不明白上传文件的文档描述here https://docs.amplify.aws/lib/storage/upload/q/platform/android。我不明白在哪里可以提供存储桶名称、IAM 凭证等。我也没有找到任何视频教程。如果在没有提供适当文档的情况下强制使用 Amplify,为什么 AWS 会这样做呢?

Here https://docs.amplify.aws/lib/storage/getting-started/q/platform/android他们提到使用 Amplify CLI 配置所有详细信息

amplify add storage

并要求使用推送更改

amplify push

但如果我们想以编程方式添加详细信息,例如存储桶名称、用户详细信息等,那么我们该怎么做呢? 为我提供使用 Amplify 框架或适用于 Android 的旧 AWS SDK 在不使用 Cognito 的情况下上传文件的分步详细信息


有多种方法可以从 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android-Amplify:使用 Amplify 将文件上传到 AWS S3/从 AWS S3 下载文件 的相关文章

随机推荐