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 可以解决问题,请告诉我。
谢谢
我的文件目前正在根据提供的教程上传到 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 可以解决问题,请告诉我。
谢谢