如何使用apollo-angular-graphql上传文件?

时间:2018-05-04 19:59:26

标签: apollo-client apollo-server

我正在寻找一个可以使用apollo-angular软件包通过graphql变异上传文件的软件包。 此外,任何人都可以帮助我了解文件上传和从服务器上传的文件格式吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

在服务器模式中,您需要将文件参数定义为类型Upload。这是Apollo提供的内置类型。但是,如果您确实收到有关类型上载的错误,只需将其添加为custom Scalar type

const { gql } = require('apollo-server');

const TypeDef = gql `

  scalar Upload

  type Mutation {
    upload(file: Upload!)
  }
`

在您的左轮手枪中,您可以在args中访问该文件,需要注意的一点是该文件将是一个应许;

const resolver = {
        Mutation: {
            async upload(obj, args, context, info) {
                const file = await args.file;
                // ... DO STUFF
            },
        }
}

您要查找的用于上传文件的软件包是apollo-angular-link-http package。在查询上下文中,您需要将useMultipart设置为true。

因此,文件上传请求应如下所示。

// The Mutation Query Using Type of 'Upload' to represent the file 

const uploadFileMutation = gql`
  mutation UploadMutation($file: Upload!) {
    upload(file: $file) {
      YOUR RESPONSE
    }
  }
}

// The Apollo Client request 
// Context of 'useMultipart' needs to be set to true to enable file upload

this.Apollo.mutate<any>({
      mutation: uploadFileMutation,
      variables: {
         file: this.file
      },
      context: {
         useMultipart: true
      }
  }).subscribe(({ data }) => {
     this.response = data.upload
  });