根据提供的教程,我的文件目前正在上传到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.
答案 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
它应有的作用。