Пример запроса:
mutation register {
register(
input: {
email: $email
avatar: $avatar
password: $password
}
) @rest(type: "Register", path: "auth/register", method: "POST")
}
Форма имеет файловый ввод, который отправляет объект File (это свойство аватара). При регистрации переменной аватара я вижу, что это свойство определено, однако при отправке данных с помощью apollo-link-rest объект файла становится пустым.
Запись переменной перед отправкой мутации:
При отправке данных на сервер через apollo объект пуст:
Я не нашел упоминания о загрузке файлов в документации, поэтому не уверен, возможно ли это.
Я считаю, что это возможно, поскольку нам пришлось исправить некоторые ошибки, связанные с искажением файловых объектов.
Тем не менее, я не использовал это в последнее время, так как я использую Apollo-link-rest для react-native.
Возможно, вам придется прочитать наш источник, чтобы отладить это и выяснить, почему это может не работать! Возможно, настоящее исправление находится в Apollo-client, а не в Apollo-link-rest!
Спасибо за ответ! В основном я хотел проверить, не упустил ли я что-то очевидное, например настройку, которую нужно включить, или ссылку, которую нужно добавить: немного_smiling_face:
Например, я видел, как некоторые люди упоминали, что apollo-upload-client (https://github.com/jaydenseric/apollo-upload-client) требуется для загрузки файлов в обычном apollo.
Я не уверен, нужно ли добавить аналогичную ссылку клиенту в apollo-link-rest?
Нет, здесь это не применимо.
Не далее как в июле кто-то опубликовал пример загрузки файла реакции с помощью apollo-link-rest.
Может это поможет?
https://github.com/apollographql/apollo-link-rest/issues/200#issuecomment -509287597
Если вы разберетесь, возможно, нам стоит написать раздел документации о том, как это сделать!
Большое спасибо @fbartho!
Эта проблема помогла решить проблему, ключевые изменения, которые мне пришлось внести, заключались в добавлении метода кодирования файла в bodySerializers
bodySerializers: {
fileEncode: (data: any, headers: Headers) => {
const formData = new FormData()
formData.append('file', data, data.name)
headers.set('Accept', '*/*')
return { body: formData, headers }
}
}
А также часть, в которой вы указываете сериализатор в запросе
@rest(
type: "File"
path: "YOUR_API_URL"
method: "POST"
bodySerializer: "fileEncode"
) {
Было бы очень полезно, если бы в документации было что-то подобное. Еще раз спасибо!