Catch the highlights of GraphQLConf 2023! Click for recordings. Or check out our recap blog post.
Docs
Guides
File Uploads

File uploads

Thanks to its server based on GraphQL Yoga, GraphQL Mesh provides file upload support out of the box.

Similarly, just a few configuration changes will be necessary to forward file uploads to Sources.

Sources file uploads

The following Gateway integrates a "UploadFiles" Source that has file upload capabilities:

You will find the complete example in examples/graphql-file-upload-example/.meshrc.yml.

Custom resolvers file uploads

Custom resolvers, programmatically provided by additionalResolvers, can also support File uploads (ex: upload to S3).

For this, the only configuration step would be to define the File scalar to enable file uploads and our file upload Mutation:

.meshrc.yaml
sources:
  # …
transforms:
  # …
additionalTypeDefs: |
  scalar File
 
  extend type Mutation {
    uploadFile(upload: File!): FileResult!
  }
 
additionalResolvers:
  - './resolvers'

Then the resolvers would look as follows:

resolvers.ts
import { Resolvers } from './.mesh'
 
const resolvers: Resolvers = {
  Mutation: {
    async uploadFile(_, { upload }) {
      const filename = upload.name
      const arrayBuffer = await upload.arrayBuffer()
      const buffer = Buffer.from(arrayBuffer)
 
      // upload file to S3...
 
      return { filename }
    }
  }
}
 
export default resolvers