jupi / dropzonejs-uploader-bundle
Symfony bundle to upload files with Dropzone.js
Installs: 154
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- psr/log: ^1|^2|^3
- symfony/config: ^6.2 || ^7.0
- symfony/dependency-injection: ^6.2 || ^7.0
- symfony/filesystem: ^6.2 || ^7.0
- symfony/http-foundation: ^6.2 || ^7.0
- symfony/http-kernel: ^6.2 || ^7.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- symfony/framework-bundle: ^6.2 || ^7.0
README
An ultra simple Symfony bundle to handle Dropzone.js upload request.
Installation
Make sure Composer is installed globally, as explained in the installation chapter of the Composer documentation.
Applications that use Symfony Flex
Open a command console, enter your project directory and execute:
$ composer require "jupi/dropzonejs-uploader-bundle"
Applications that don't use Symfony Flex
Step 1: Download the Bundle
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:
$ composer require "jupi/dropzonejs-uploader-bundle"
Step 2: Enable the Bundle
Then, enable the bundle by adding it to the list of registered bundles
in the config/bundles.php
file of your project:
// config/bundles.php return [ // ... Jupi\DropzoneJsUploaderBundle\DropzoneJsUploaderBundle::class => ['all' => true], ];
Usage
The way of working of this bundle is very simple. It provides a param converter which handle the current request and pass the uploaded file to the controller
If the request is chunked, a temp file is created inside the system temp folder (using sys_get_temp_dir()
) and null
is passed to the controller until the file is entirely uploaded.
I recommend to use VichUploaderBundle to handle the database saving side.
<?php namespace App\Controller; use App\Entity\File; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; // ... use Jupi\DropzoneJsUploaderBundle\Attribute\MapDropzoneJsUpload; class AppController extends AbstractController { #[Route("/upload", name:"upload")] public function upload( EntityManagerInterface $em, #[MapDropzoneJsUpload] ?UploadedFile $file, ): Response { // Check if $file is not null, in case of a chunked request if (null !== $file) { // Assuming it is a correctly configured VichUploadable class $entity = new File(); $entity->setFile($file); $em->persist($entity); $em->flush(); } // Return a success resonse // In case of an error, this bundle will correct the response format // so Dropzone.JS will display the correct 500 error message return new JsonResponse(['success' => true]); } }