jupi / dropzonejs-uploader-bundle

Symfony 组件,用于使用 Dropzone.js 上传文件

安装: 149

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

v3.1.0 2024-06-29 18:39 UTC

This package is auto-updated.

Last update: 2024-09-08 09:45:43 UTC


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]);
    }
}