Получение AppSync S3Object

Мои файлы в настоящее время загружаются в корзину s3 в соответствии с предоставленными руководствами.

У меня есть тип сообщения с полем файла, указывающим на S3Object. S3Object имеет значения сегмента, ключа и региона.

Я хочу разрешить моим пользователям загружать свои загруженные файлы, но я не могу получить доступ к Post> file через запрос. Это означает, что я не могу получить 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.


person Zak Singh    schedule 22.04.2018    source источник


Ответы (1)


Я считаю, что вам нужно заключить $util.dynamodb.fromS3ObjectJson($ctx.result.file) в вызов $util.toJson(). Не могли бы вы изменить шаблон сопоставления ответов на $util.toJson($util.dynamodb.fromS3ObjectJson($ctx.result.file)) и посмотреть, работает ли это?

В качестве примечания: я думаю, что вы можете достичь желаемого эффекта, не выполняя второй вызов DynamoDB из преобразователя Post.file. Создайте источник данных «Нет» и измените преобразователь Post.file для его использования. Вы можете предоставить шаблон сопоставления запросов barebones, например

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

а затем можно изменить шаблон сопоставления ответов, чтобы использовать источник вместо результата.

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

Поскольку к моменту разрешения поля Post.file сообщение уже будет получено, информация уже будет доступна в источнике. Если вам нужно получить S3Link из таблицы, отличной от объектов Post, вам понадобится второй вызов DynamoDB.

Надеюсь, это поможет, и дайте мне знать, решит ли проблему вызов $ util.toJson.

Спасибо

person mparis    schedule 23.04.2018
comment
У меня была такая же проблема с получением данных из DynamoDB, и этот ответ тоже работает. - person Dean Koštomaj; 27.01.2019
comment
Большое спасибо @mparis! Мне потребовался целый день, чтобы понять, в чем проблема. Документация Amplify очень бедна по сравнению с документом Google Firebase. - person Ahmet Kazaman; 24.08.2019