Android-Amplify:使用 Amplify 向/从 AWS S3 上传/下载文件
Posted
技术标签:
【中文标题】Android-Amplify:使用 Amplify 向/从 AWS S3 上传/下载文件【英文标题】:Android-Amplify: Uploading/downloading file to/from AWS S3 using Amplify 【发布时间】:2020-11-08 09:26:20 【问题描述】:我想开发一个简单的 android 应用程序来将图像文件上传到 AWS 中已经创建的 S3 存储桶。如果我用谷歌搜索,所有最新的 AWS 文档都将我重定向到使用 Amplify 框架。我不明白上传文件描述here 的文档。我不明白在哪里可以提供存储桶名称、IAM 凭证等。我也找不到任何视频教程。如果在没有提供适当文档的情况下强制使用 Amplify,为什么要使用 AWS?
Here 他们提到使用 Amplify CLI 配置所有细节
amplify add storage
并要求使用
推送更改amplify push
但是如果我们想以编程方式添加诸如存储桶名称、用户详细信息等详细信息,那么我们该怎么做呢? 使用 Amplify 框架或旧的适用于 android 的 AWS 开发工具包在不使用 Cognito 的情况下上传文件,给我分步详细信息
【问题讨论】:
运行 amplify init 并在那里添加存储,这可能是最简单的方法 【参考方案1】:有多种方法可以将文件从 Android 设备上传到 S3。这里有一些。
使用 Amplify Android
主要的documentation for Amplify Android's Storage category 假设您将使用 Amplify CLI 创建新 AWS 资源。还有一些关于using an existing S3 bucket的注释。
使用适用于 Android 的 AWS 开发工具包
如果两者都不能满足您的需求,您可以使用适用于 Android 的 AWS 开发工具包中的旧 TransferUtility
。这是an example use of the TransferUtility
。
适用于 Android 的 AWS 开发工具包,无 Cognito
如您所见,上述文档使用 AWSMobileClient
,它是 Amazon Cognito 的接口。但是,您可以使用CredentialsProvider
的任何实现来进行身份验证; AWSMobileClient
只是凭据提供程序的一个示例。
最简单(也是最不安全)的方法可能是使用 StaticCredentialsProvider
提供 IAM 用户的访问权限和密钥,如下所示。
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)
【讨论】:
【参考方案2】:aws - 为 android 放大,使用它我们可以执行 aws 操作, 在这里,我将文件上传到 s3 存储桶中。
让我分享一下实现这一点所需的基本文件
对于基本的放大设置:
-
https://www.youtube.com/watch?v=vefyYGn9C00&t=2s
https://www.youtube.com/watch?v=qgrXMzFMHx4&t=306s
第 1 步:
https://docs.amplify.aws/lib/auth/getting-started/q/platform/android/
身份验证
第 2 步:
https://docs.amplify.aws/lib/auth/getting-started/q/platform/android/ https://docs.amplify.aws/lib/auth/signin/q/platform/android/s3-存储
第 3 步:
-
https://docs.amplify.aws/lib/storage/getting-started/q/platform/android/(可以从终端创建bucket)
https://docs.amplify.aws/cli/storage/import/(如果您已经在 s3 控制台中创建了存储桶,请遵循此文档)
https://docs.amplify.aws/lib/storage/configureaccess/q/platform/android/(上传文件前必须添加StorageUploadFileOptions)
【讨论】:
以上是关于Android-Amplify:使用 Amplify 向/从 AWS S3 上传/下载文件的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?