3

I am looking for a package which I can use for uploading files via graphql mutation using apollo-angular package. Also, can anyone help me understand which format will the file be uploaded and fetched to and from the server?

Thanks for your time.

1 Answer 1

4

In your server schema you need to define the file argument as type Upload. This is a built in type provided by Apollo. However if you do get errors about type Upload just add it as a custom Scalar type.

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

const TypeDef = gql `

  scalar Upload

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

In your revolvers you can access the file in your args, One thing to note is that the file will be a promise;

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

The package you are looking for for uploading files is the apollo-angular-link-http package. Within the query context you need to set useMultipart to true.

So a file upload request should look something like this.

// 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
  });
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.