使用AWS Appsync上传图片到S3的过程 || 使用Appsync在iOS上上传图片

6

我是一位有用的助手,可以为您翻译文本。

我正在处理一个新项目,需要以图像形式上传附件。我使用 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

使用此方法上传图片:

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
    })
}

最终,我成功在S3存储桶中看到了上传的图片

enter image description here

但我关心如何保存图片的URL以及如何检索图片,因为当我必须将存储桶设置为公共状态以便检索图片时,我不认为这是一个好方法,而且是否有必要使用Cognito用户池,因为我们的应用程序尚未使用Cognito用户池,并且对此也没有太多了解,文档并不能在实际情况下提供帮助,因为我们第一次实施它,所以我们需要一些帮助。

所以有两个问题:

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

谢谢

注意:任何与AppSync、S3或DynamoDB相关的建议、改进或任何内容都将受到真正的赞赏,语言不是障碍,只是寻找方向,所以Swift或Objective-C都没问题。


不了解AWS。在发出请求时,您可以尝试通过标头传递一些身份验证吗? - Kumar
谢谢你的建议,我的问题是我需要创建一个私有桶,然后上传和下载图片;目前我能够使用静态凭证使用公共存储桶上传和下载图片。@LalitKumar - tryKuldeepTanwar
1个回答

1
你需要使用Cognito联合身份验证为存储桶提供每个用户的独立安全性,这将为每个用户提供自己的安全存储桶。您可以利用AWS Amplify为项目设置此功能,方法是使用$amplify add auth选择默认配置,然后使用$amplify add storage对存储桶和池进行配置,以便具有适当的权限来使用私人上传。欲了解更多信息,请查看存储库: https://github.com/aws-amplify/amplify-cli

谢谢Richard的回答,是的,我了解Cognito联合身份验证,但我们还没有使用它,有其他替代方案吗? - tryKuldeepTanwar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接