Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Ecodev/graphql-upload

Repository files navigation

GraphQL Upload

Build Status Code Quality Code Coverage Total Downloads Latest Stable Version License Join the chat at https://gitter.im/Ecodev/graphql-upload

A PSR-15 middleware to support file uploads in GraphQL. It implements the multipart request specification for webonyx/graphql-php.

Quick start

Install the library via composer:

composer require ecodev/graphql-upload

Configure as middleware

In Laminas Mezzio, it would typically be in config/routes.php something like:

use Application\Action\GraphQLAction;
use Mezzio\Helper\BodyParams\BodyParamsMiddleware;
use GraphQL\Upload\UploadMiddleware;
$app->post('/graphql', [
 BodyParamsMiddleware::class, 
 UploadMiddleware::class, // This is the magic
 GraphQLAction::class,
], 'graphql');

Other frameworks

This lib is an implementation of PSR-15, so it can be used with any framework supporting PSR-15. For specific configuration instructions, refer to your framework documentation.

If your framework does not support PSR-15 middleware, you will probably need some kind of bridge. Again, refer to your framework for specific instructions.

Usage in schema

Then you can start using in your mutations like so:

<?php
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
use GraphQL\Type\Schema;
use GraphQL\Upload\UploadType;
use Psr\Http\Message\UploadedFileInterface;
// Build your Schema
$schema = new Schema([
 'query' => new ObjectType([
 'name' => 'Query',
 'fields' => [],
 ]),
 'mutation' => new ObjectType([
 'name' => 'Mutation',
 'fields' => [
 'testUpload' => [
 'type' => Type::string(),
 'args' => [
 'text' => Type::string(),
 'file' => new UploadType(),
 ],
 'resolve' => function ($root, array $args): string {
 /** @var UploadedFileInterface $file */
 $file = $args['file'];
 // Do something with the file
 $file->moveTo('some/folder/in/my/project');
 return 'Uploaded file was ' . $file->getClientFilename() . ' (' . $file->getClientMediaType() . ') with description: ' . $args['text'];
 },
 ],
 ],
 ]),
]);

Limitations

  • It only works with PSR-7 requests. If you were not using PSR-7 yet, laminas-diactoros is one of many implementation that could be used to create PSR-7 requests.

About

A PSR-15 middleware to support file uploads in GraphQL

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

AltStyle によって変換されたページ (->オリジナル) /