4

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

我有一个带有指向 S3Object 的文件字段的 Post 类型。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.

4

1 回答 1

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 的调用可以解决问题,请告诉我。

谢谢

于 2018-04-23T21:27:57.390 回答