Apollo-link-rest: Можно ли отправлять файловые объекты с помощью apollo-link-rest?

Созданный на 11 нояб. 2019  ·  5Комментарии  ·  Источник: apollographql/apollo-link-rest

Пример запроса:

  mutation register {
    register(
      input: {
        email: $email
        avatar: $avatar
        password: $password
      }
    ) @rest(type: "Register", path: "auth/register", method: "POST")
  }

Форма имеет файловый ввод, который отправляет объект File (это свойство аватара). При регистрации переменной аватара я вижу, что это свойство определено, однако при отправке данных с помощью apollo-link-rest объект файла становится пустым.

Запись переменной перед отправкой мутации:
image

При отправке данных на сервер через apollo объект пуст:

image

Я не нашел упоминания о загрузке файлов в документации, поэтому не уверен, возможно ли это.

help wanted 🛠 question❔

Все 5 Комментарий

Я считаю, что это возможно, поскольку нам пришлось исправить некоторые ошибки, связанные с искажением файловых объектов.

Тем не менее, я не использовал это в последнее время, так как я использую 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"
      ) {

Было бы очень полезно, если бы в документации было что-то подобное. Еще раз спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги