Как преобразовать тип файла загрузки в тип GraphQL UploadFile? - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь загрузить изображение на сервер на моей стороне клиента, созданной с помощью vue.js, но у меня постоянно возникает ошибка.Я пытался отправить запрос с formData, пытался напрямую с объектом списка файлов, с файловым объектом.

Но, похоже, ничего не работает.

Моя форма

<form enctype="multipart/form-data">
  <input
    @change="uploadPhoto($event)"
    accept="image/*"
    ref="file"
    type="file"
    name="files"
    id="files"
    class="inputfile inputfile-upload"
    capture="user"
  >
</form>

Моя функция загрузки

uploadPhoto({ target }) {
  const formData = new FormData()
  formData.append('files', target.files)

  HTTP.post('/graphql', {
    query: `
      mutation UploadFile($file: Upload!) {
        upload(file: $file) {
          id
          hash
          url
        }
      }
    `,
    variables: {
      file: formData,
    },
  })
},

Отображаемая ошибка:

{"errors":[{"message":"The \"path\" argument must be one of type string, Buffer, or URL. Received type undefined"

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 29 июня 2019

Если вы используете graphql-upload (ранее apollo-upload-server) или apollo-server (который использует graphql-upload под капотом), вы должны использовать клиент, который поддерживает спецификацию GraphQL Multipart .

Если вы используете Vue, проще всего настроить Apollo , используя соответствующую ссылку .

Пример использования:

const { ApolloClient } = require('apollo-client')
const { InMemoryCache } = require('apollo-cache-inmemory')
const { createUploadLink } = require('apollo-upload-client')

const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: createUploadLink()
})

Дополнительные сведения см. В документации.

...