AppSync S3Object检索

时间:2018-04-22 03:29:28

标签: amazon-web-services amazon-s3 aws-appsync

根据提供的教程,我的文件目前正在上传到s3存储桶。

我有一个Post类型,其文件字段指向S3Object。 S3Object具有bucket,key和region的值。

我想允许我的用户下载他们上传的文件,但我无法访问Post>通过查询文件。这意味着我无法获取下载URL。

现在,DynamoDB在上传时存储了以下文件(我在这里更改了值): {"s3":{"key":"id.pdf","bucket":"my-bucket","region":"my-region"}}

我的Post>解析器文件看起来像这样: { "version": "2017-02-28", "operation": "GetItem", "key": { "id": $util.dynamodb.toDynamoDBJson($ctx.source.id), } }

回复模板: $util.dynamodb.fromS3ObjectJson($ctx.result.file)

当我运行查询时,出现以下错误: Error: GraphQL error: Unable to convert {bucket=my-bucket, region=my-region, key=id.pdf} to class java.lang.Object.

2 个答案:

答案 0 :(得分:4)

我认为你需要在$util.dynamodb.fromS3ObjectJson($ctx.result.file)的电话中打包$util.toJson()。您能否将响应映射模板更改为$util.toJson($util.dynamodb.fromS3ObjectJson($ctx.result.file)),看看是否有效?

作为旁注,我认为无需从Post.file解析器再次调用DynamoDB就可以达到预期的效果。创建一个"无" datasource并更改Post.file解析器以使用它。您可以提供准系统请求映射模板,例如

{ "version": "2017-02-28", "payload": {} }

然后可以更改您的响应映​​射模板以使用源而不是结果。

$util.toJson($util.dynamodb.fromS3ObjectJson($ctx.source.file))

由于在解析Post.file字段时已经提取了帖子,因此信息将在源中可用。如果您需要从与Post对象不同的表中获取S3Link,那么您将需要第二次DynamoDB调用。

希望这会有所帮助,如果对$ util.toJson的调用解决了这个问题,请告诉我。

由于

答案 1 :(得分:2)

This solution不再适用于none类型的Local数据源,或者至少不可能在aws控制台中做到这一点。

我得到了:

  

MappingTemplate错误:找不到字段'$ [operation]'的值

每次我尝试此解决方案。当我将数据源更改为具有文件字段的数据源并使用请求解析器时:

master

和响应解析器:

spark

它应有的作用。