【问题标题】:Process for uploading image to s3 with AWS Appsync || iOS image uploading with Appsync使用 AWS Appsync 将图像上传到 s3 的过程 ||使用 Appsync 上传 iOS 图像
【发布时间】:2019-02-21 02:20:42
【问题描述】:

我正在开发一个需要以图片形式上传附件的新项目。我正在使用 DynamoDB 和 AppSync API 从数据库中插入和检索数据。由于我们是 AppSync 以及我们用于应用程序的所有亚马逊服务和数据库的新手,所以我对身份验证过程有点困惑。现在我们正在使用 API 密钥进行身份验证,我已经尝试了这些步骤将图像上传到 s3。

1 使用静态配置配置AWSServiceManager,例如:-

let staticCredit =  AWSStaticCredentialsProvider(accessKey: kAppSyncAccessKey, secretKey: kAppSyncSecretKey)
let AppSyncRegion: AWSRegionType = .USEast2
let config = AWSServiceConfiguration(region: AppSyncRegion, credentialsProvider: staticCredit)
AWSServiceManager.default().defaultServiceConfiguration = config

2 用这种方法上传图片:-

func updatePictureToServer(url:URL, completion:@escaping (Bool)->Void){
    let transferManager = AWSS3TransferManager.default()
    let uploadingFileURL = url
    let uploadRequest = AWSS3TransferManagerUploadRequest()
    let userBucket = String(format: "BUCKET")
    uploadRequest?.bucket = userBucket
    let fileName = String(format: "%@%@", AppSettings.getUserId(),".jpg")
    uploadRequest?.key = fileName
    uploadRequest?.body = uploadingFileURL
    transferManager.upload(uploadRequest!).continueWith(executor: AWSExecutor.mainThread(), block: { (task:AWSTask<AnyObject>) -> Any? in
        if let error = task.error as NSError? {
            if error.domain == AWSS3TransferManagerErrorDomain, let code = AWSS3TransferManagerErrorType(rawValue: error.code) {
                switch code {
                case .cancelled, .paused:
                    break
                default:
                    print("Error uploading: \(String(describing: uploadRequest!.key)) Error: \(error)")
                }
            } else {
                print("Error uploading: \(String(describing: uploadRequest!.key)) Error: \(error)")
            }
            completion(false)
            return nil
        }

        _ = task.result
        completion(true)
        print("Upload complete for: \(String(describing: uploadRequest!.key))")
        return nil
    })
}

3 最后我可以在 S3 存储桶上看到上传的图像

但我担心如何保存图像的 url 以及如何检索图像,因为当我必须让 buket PUBLIC 检索图像时,我认为这不是一个好方法,而且是有必要拥有一个 Cognito 用户池,因为我们还没有在我们的应用程序中使用 Cognito 用户池,并且对此也没有太多了解,并且文档在实际情况中没有帮助,因为我们是第一次实施 ti,所以我们需要一些帮助。

所以两个问题:-

  1. 用于为 S3 和 AppSync 上传和检索图像的正确过程。
  2. 是否需要使用 Cognito 用户池进行图片上传和检索。

谢谢

注意:任何与 AppSync、S3 或 DynamoDB 相关的建议或改进或任何事情都将不胜感激,语言不是障碍,只是寻找快速或客观的方向-c 没问题。

【问题讨论】:

  • 不了解 AWS。您可以尝试在发出请求时在标头中传递一些身份验证吗?
  • 感谢您的建议,我的问题是我需要创建一个私有存储桶然后上传和下载图片,目前我可以使用具有静态凭据的公共存储桶上传和下载图片。 @LalitKumar

标签: ios objective-c swift amazon-web-services aws-appsync-ios


【解决方案1】:

您需要使用 Cognito Federated Identities 为存储桶提供每个身份的安全性,该身份为每个用户提供自己的安全存储桶。您可以利用 AWS Amplify 为您的项目设置此设置,使用 $amplify add auth 并选择默认配置,然后选择 $amplify add storage 配置具有适当权限的存储桶和池以使用私有上传。

欲了解更多信息,请查看 repo:https://github.com/aws-amplify/amplify-cli

【讨论】:

  • 感谢 Richard 的回答,是的,我读到了 Cognito Federated Identities,但我们还没有使用它,还有其他选择吗?
猜你喜欢
  • 2018-12-17
  • 2019-01-15
  • 2019-01-20
  • 1970-01-01
  • 2018-07-07
  • 2018-03-02
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
相关资源
最近更新 更多