AppSync S3Object检索

Zak*_*ngh 3 amazon-s3 amazon-web-services aws-appsync

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

我有一个Post类型,其文件字段指向S3Object。S3Object具有存储桶,键和区域的值。

我想允许我的用户下载他们上传的文件,但是我无法通过查询访问“帖子>文件”。这意味着我无法获得下载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.

mpa*_*ris 6

相信您需要给$util.dynamodb.fromS3ObjectJson($ctx.result.file)打电话$util.toJson()。您能否将响应映射模板更改为$util.toJson($util.dynamodb.fromS3ObjectJson($ctx.result.file))并查看是否可行?

作为附带说明,我认为您可以实现所需的效果,而无需从Post.file解析器中再次调用DynamoDB。创建一个“无”数据源并更改Post.file解析器以使用它。您可以提供准系统请求映射模板,例如

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

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

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

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

希望这会有所帮助,并让我知道对$ util.toJson的调用是否可以解决此问题。

谢谢