@EvgeniySaschenko

Как как через Apollo (GraphQl) загрузить несколько файлов?

Добрый день,

Есть необходимость GraphQl запросом отправить на сервер несколько файлов,
но выходит оправить только 1 файл если в variables в переменную file я передаю не массив а один файл dataFiles[0].

Массив dataFiles выглядит так
dataFiles = [File, File, File, File]

В доке рекомендуют тип указывать в квадратных скобках: $file: [FileUpload!]! вместо $file: FileUpload! но вариант из доки ваще не работает

{
            mutation: gql`
              mutation Feedback(
                $message: String!
                $file: FileUpload!
              ) {
                Feedback(
                  message: $message
                  files: {file:$file}
                ) {
                  request
                }
              }
            `,
            variables: {
              message: dataMessage,
              file: dataFiles,
            },
}
  • Вопрос задан
  • 557 просмотров
Решения вопроса 1
Fi1osof
@Fi1osof
JS fullstack developer
Ваш представленный здесь запрос рассчитан на передачу только одного файла. С таким запросом несколько файлов передать вы никак не сможете.
Вот запрос на передачу нескольких файлов за один запрос:
{
            mutation: gql`
              mutation Feedback(
                $message: String!
                $files: [Upload!]!
              ) {
                Feedback(
                  message: $message
                  files: $files
                ) {
                  request
                }
              }
            `,
            variables: {
              message: dataMessage,
              files: dataFiles,
            },
}


Если он у вас не работает, значит проблема на стороне сервера (Возможно вы там прописали обработку одного передаваемого файла).
Вот пример обработки нескольких загруженных файлов: https://github.com/prisma-cms/upload-module/blob/m... (хотя в сети наверняка сможете найти более компактный вариант).

P.S. >> В доке рекомендуют тип указывать в квадратных скобках

Дело не в доке, а в синтаксисе GraphQL. В квадратных скобках - это массив. Если хотите передавать массив файлов, то обязательно тип должен быть объявлен в квадратных скобках, то есть массив.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы