2017 © Pedro Peláez
 

library graphql-upload

A middleware to support file uploads in GraphQL

image

ecodev/graphql-upload

A middleware to support file uploads in GraphQL

  • Wednesday, June 13, 2018
  • by PowerKiKi
  • Repository
  • 8 Watchers
  • 30 Stars
  • 2,404 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 3 Forks
  • 0 Open issues
  • 5 Versions
  • 50 % Grown

The README.md

GraphQL Upload

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

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

Quick start

Install the library via composer:, (*3)

composer require ecodev/graphql-upload

Configure as middleware

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

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., (*5)

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. Or else, you could use the direct usage below for manual integration., (*6)

Direct usage

If you don't use middleware, it can be called directly like so:, (*7)

<?php

use GraphQL\Server\StandardServer;
use GraphQL\Upload\UploadMiddleware;
use Laminas\Diactoros\ServerRequestFactory;

// Create request (or get it from a framework)
$request = ServerRequestFactory::fromGlobals();
$request = $request->withParsedBody(json_decode($request->getBody()->getContents(), true));

// Process uploaded files
$uploadMiddleware = new UploadMiddleware();
$request = $uploadMiddleware->processRequest($request);

// Execute request and emits response
$server = new StandardServer(/* your config here */);
$result = $server->executePsrRequest($request);
$server->getHelper()->sendResponse($result);

Usage in schema

Then you can start using in your mutations like so:, (*8)

<?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.

The Versions

13/06 2018

dev-master

9999999-dev

A middleware to support file uploads in GraphQL

  Sources   Download

MIT

The Requires

 

The Development Requires

api middleware upload graphql multipart

13/06 2018

3.0.0

3.0.0.0

A middleware to support file uploads in GraphQL

  Sources   Download

MIT

The Requires

 

The Development Requires

api middleware upload graphql multipart

08/02 2018

2.0.1

2.0.1.0

A middleware to support file uploads in GraphQL

  Sources   Download

MIT

The Requires

 

The Development Requires

api middleware upload graphql multipart

23/01 2018

2.0.0

2.0.0.0

A middleware to support file uploads in GraphQL

  Sources   Download

MIT

The Requires

 

The Development Requires

api middleware upload graphql multipart

19/01 2018

1.0.0

1.0.0.0

A middleware to support file uploads in GraphQL

  Sources   Download

MIT

The Requires

 

The Development Requires

api middleware upload graphql multipart