jupi / dropzonejs-uploader-bundle
Symfony 组件,用于使用 Dropzone.js 上传文件
v3.1.0
2024-06-29 18:39 UTC
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
一个超简单的 Symfony 组件,用于处理 Dropzone.js 上传请求。
安装
请确保已全局安装 Composer,具体说明请参考 Composer 文档中的 安装章节。
使用 Symfony Flex 的应用程序
打开命令行,进入您的项目目录并执行以下命令:
$ composer require "jupi/dropzonejs-uploader-bundle"
不使用 Symfony Flex 的应用程序
步骤 1:下载组件
打开命令行,进入您的项目目录并执行以下命令下载此组件的最新稳定版本:
$ composer require "jupi/dropzonejs-uploader-bundle"
步骤 2:启用组件
然后,通过将其添加到项目 config/bundles.php 文件中注册的组件列表来启用该组件
// config/bundles.php return [ // ... Jupi\DropzoneJsUploaderBundle\DropzoneJsUploaderBundle::class => ['all' => true], ];
用法
此组件的工作方式非常简单。它提供了一个参数转换器,用于处理当前请求并将上传的文件传递到控制器
如果请求是分块传输的,系统临时文件夹(使用 sys_get_temp_dir())内将创建一个临时文件,并将 null 传递到控制器,直到文件完全上传。
我建议使用 VichUploaderBundle 来处理数据库保存方面。
<?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]); } }