AWS Appsync - 无法使用Cognito用户池自动将S3Object上载到存储桶 - iOS

时间:2018-04-26 19:09:30

标签: ios swift amazon-s3 graphql aws-appsync

使用Cognito用户池作为我的身份验证方法,我可以通过应用程序登录经过验证的用户,然后这些经过身份验证的用户可以使用AppSync变异写入DynamoDB。 S3Object信息也在Dynamo中填充为JSON字符串,如下所示:

"pdf": "{\"s3\":{\"key\":\"6_A_2018-04-26_etc.pdf\",\"bucket\":\"#####\",\"region\":\"us-west-2\"}}"

AppSync中创建变异的请求映射模板是:

{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
    "id" : { "S" : "${util.autoId()}" }
},
#set( $attribs = $util.dynamodb.toMapValues($ctx.args.input) )
#if($util.isNull($ctx.args.input.pdf.version))
    #set( $attribs.pdf = $util.dynamodb.toS3Object($ctx.args.input.pdf.key, $ctx.args.input.pdf.bucket, $ctx.args.input.pdf.region))
#else
    #set( $attribs.pdf = $util.dynamodb.toS3Object($ctx.args.input.pdf.key, $ctx.args.input.pdf.bucket, $ctx.args.input.pdf.region, $ctx.args.input.pdf.version))
#end
"attributeValues" : $util.toJson($attribs)
}

响应映射模板:

$util.toJson($ctx.result)

pdf(S3Object)请求映射模板(我已经尝试了版本和空载荷{}无解析器和这一个):

{
  "version" : "2017-02-28",
  "operation" : "Query",
  "query" : {
      ## Provide a query expression. **
      "expression": "id = :id",
      "expressionValues" : {
          ":id" : {
              "S" : "${ctx.args.id}"
          }
      }
  }
}

pdf的响应映射模板:

$util.toJson($util.dynamodb.fromS3ObjectJson($context.source.pdf))

但是桶中没有创建S3 OBJECT。但是,如果我自己使用S3TransferUtility.default()来发送上传请求,它的工作完全正常,所以我必须为PutObject设置正确的权限(同样也是GetObject和ListObjects,因为我也可以从桶中列出/下载对象与s3TransferUtility)。

由于AppSync应该使用S3TransferUtility.default(),有没有人知道为什么上传不会自动发生?之后,我的视图控制器被解雇了,就像在教程中一样,但这不应该是一个问题,因为我使用的是乐观响应方法,并没有抛出任何错误。我也尝试过简单地使用执行变异功能而没有乐观的响应。我也尝试过不解雇视图控制器并等待。仍然没有上传到S3,但写入Dynamo永远不会失败!当我从飞机模式返回时,甚至乐观地更新Dynamo。 PDF doc的文件大小约为250KB。

顺便说一下,在使用graphql listAll查询从Dynamo中提取我的项目之后,以下内容也可以正常工作,并且只有在手动上传到S3之后才能正常运行,因此它实际上在桶中(我错过了一些可选项)链接我在工作这部分来自记忆):

let s3Object = S3Object.init(snapshot: selectedItem.pdf.snapshot)
appSyncClient.s3ObjectManager.download(s3Object: s3Object, toURL: url) { ifSuccess, error in
})

这样的事情。它会下载该对象,但它是因为我手动调用它。公平地说,我实际上不确定从graphql查询中检索到的S3Object的预期功能是什么(它是否应该自动下载...?我是否可以访问除AllPostsQuery以外的任何项目.Data.ListPost.Item.Pdf还是我们打算使用桶,密钥,区域来下载自己?我认为这是关于主题的。

任何帮助都会非常感激我真的在这个墙上碰到了我的头。

编辑:More / updated info here on the AWS Forums

编辑:GitHub问题引起了AWS的回复,他们是looking into it

0 个答案:

没有答案