AppSync S3Object 检索

AppSync S3Object retrieval

我的文件目前正在根据提供的教程上传到 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.

我认为您需要在对 $util.toJson() 的调用中包装 $util.dynamodb.fromS3ObjectJson($ctx.result.file)。您能否将响应映射模板更改为 $util.toJson($util.dynamodb.fromS3ObjectJson($ctx.result.file)) 并查看是否有效?

附带说明一下,我认为您无需从 Post.file 解析器再次调用 DynamoDB 即可达到预期效果。创建一个 "None" 数据源并更改 Post.file 解析器以使用它。您可以提供准系统请求映射模板,例如

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

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

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

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

希望这对您有所帮助,如果调用 $util.toJson 可以解决问题,请告诉我。

谢谢