【问题标题】:How to download file from an AWS S3 bucket in Swift with unauthenticated users如何使用未经身份验证的用户从 Swift 中的 AWS S3 存储桶下载文件
【发布时间】:2019-07-29 23:32:49
【问题描述】:

我想使用 Swift 从我的 iOS 应用程序中下载我的 AWS S3 存储桶中的文件。我该怎么做?

我进行了大量研究和谷歌搜索,只能从 AWS 中找到有关如何在 Objective-C 中执行此操作的文档。我已经设置了 AWS Cognito,并授予未经身份验证的用户从我的存储桶中获取对象的权限。我现在只需要弄清楚如何从我的存储桶中实际下载。谁能在这里指导我正确的方向?我将不胜感激。

【问题讨论】:

  • 在 AWS 发布一些 Swift 文档之前,我只是将存储桶公开并使用一个简单的 HTTP 请求。

标签: ios swift amazon-web-services amazon-s3


【解决方案1】:

您还可以使用 AWS Amplify 框架。与存储相关的文档在这里:https://aws-amplify.github.io/docs/ios/storage,它将指导您使用 CocoaPods 配置 S3 存储桶和安装 Amplify。即使您有自己的存储桶,我也建议您阅读该文档。如果您想使用现有的 S3 存储桶,如何将其添加到 amplifyconfiguration.json 以配置 Amplify Storage 插件会更清楚。

Swift 代码将如下所示:

  Amplify.Storage.downloadData(key: "myKey") { (event) in
      switch event {
      case .completed(let data):
          print("Completed: \(data)")
      case .failed(let storageError):
          print("Failed: \(storageError.errorDescription). \(storageError.recoverySuggestion)")
      case .inProcess(let progress):
          print("Progress: \(progress)")
      default:
          break
      }
  }

【讨论】:

    【解决方案2】:

    如果您使用 AWS 资源来检索要关闭的对象 然后他们必须具有访问 S3 存储桶中数据的角色

    如果您直接从 AWS 以外的设备检索, 然后你必须公开 S3 存储桶

    但我建议你使用 EC2 或 Lambda 作为代理 并且使用您的 iOS 应用程序将尝试检索数据, 届时 EC2 或 Lambda 将首先获取数据并与您共享 所以,你不需要公开你的存储桶

    【讨论】:

    • 感谢您的回复。我赋予未经身份验证的用户访问此存储桶内对象的角色。你知道实际执行此操作的 Swift 代码吗?
    • 不抱歉,我不会用 Swift 编写代码,但你可以通过谷歌搜索找到实现代码
    猜你喜欢
    • 2020-08-04
    • 2018-05-29
    • 1970-01-01
    • 2017-03-25
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2019-11-18
    相关资源
    最近更新 更多