t3n / graphql-upload
Extension for t3n/graphql that implements upload-handling
Installs: 59 383
Dependents: 1
Suggesters: 0
Security: 0
Stars: 2
Watchers: 3
Forks: 3
Open Issues: 0
Type:neos-package
Requires
- php: >=7.3
- ext-json: *
- neos/flow: ^7.0 || ^8.0 || dev-master
- t3n/graphql: ^3.0
This package is auto-updated.
Last update: 2024-12-05 18:03:51 UTC
README
Sidecar package for t3n/graphql that brings an Upload
scalar and enables you to handle file uploads in your schema.
Simply install the package via composer:
composer require t3n/graphql-upload
Configuration
This package ships all needed parts. However, you must add the typeDefs and the Resolver to your schema like this:
t3n: GraphQL: endpoints: 'your-endpoint': #use your endpoint variable here schemas: upload: typeDefs: 'resource://t3n.GraphQL.Upload/Private/GraphQL/schema.upload.graphql' resolvers: Upload: 't3n\GraphQL\Upload\Resolver\Type\UploadResolver'
This is everything you need to do. Once configured you can use the Upload
scalar in your app.
Usage
To use the Upload
scalar you might want to add it as an arg to a mutation like this:
type Mutation { uploadFile(file: Upload): String }
This package will handle the upload itself and pass an Neos\Http\Factories\FlowUploadedFile
to your MutationResolver
. Within your resolver method your could for instance import your resource:
class MutationResolver implements ResolverInterface { /** * @Flow\Inject * * @var ResourceManager */ protected $resourceManager; public function uploadFile($_, $variables): string { /** @var FlowUploadedFile $file */ $file = $variables['file']; $resource = $this->resourceManager->importResource($file->getStream()->detach()); $resource->setFilename($file->getClientFilename()); $resource->setMediaType($file->getClientMediaType()); return $file->getClientFilename(); } }
Some notes
To actually use file upload your frontend client must use multipart/form-data
in your forms. This Package is tested with a react app that uses https://github.com/jaydenseric/apollo-upload-client