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

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 的情况下上传文件

Jam*_*son 6

有多种方法可以从 Android 设备将文件上传到 S3。这里有一些。

使用 Android 放大

Amplify Android 存储类别的主要文档是在假设您将使用 Amplify CLI创建新的AWS 资源的情况下编写的。还有一些有关使用现有 S3 存储桶的注意事项。

使用适用于 Android 的 AWS 开发工具包

TransferUtility如果两者都不能满足您的需求,您可以使用适用于 Android 的 AWS 开发工具包中的旧版本。下面是一个使用 的示例TransferUtility

适用于 Android 的 AWS 开发工具包,无 Cognito

正如您所注意到的,上面的文档使用了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)