groovili / rest-uploader-bundle
用于处理 REST API 文件上传和管理的 Symfony 扩展包
1.0.0
2018-01-14 20:38 UTC
Requires
- php: >=7.1
- doctrine/doctrine-bundle: ^1.6
- doctrine/orm: ^2.5
- symfony/console: ^2.8|^3.0
- symfony/framework-bundle: ^3.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^1.1
- phpunit/phpunit: ^4.8|^5.0
- symfony/phpunit-bridge: ~3.2
- symfony/yaml: ^2.8|^3.0
Suggests
- friendsofsymfony/rest-bundle: API bundle to handle REST easier
- jms/serializer-bundle: Serialaizer
- lexik/jwt-authentication-bundle: Json web token for authentication
- nelmio/api-doc-bundle: Automatic documentation generator
This package is not auto-updated.
Last update: 2024-09-29 05:20:47 UTC
README
一个用于文件上传和管理的 Symfony 扩展包,适用于 REST API。
提供 File
实体,rest_uploader.manager
,rest_uploader.validator
服务,RestFileType
和需要订阅的事件列表
rest_uploader.file.preUpload
rest_uploader.file.postUpload
rest_uploader.file.preDownload
rest_uploader.file.preDelete
rest_uploader.file.preGetPath
以下示例部分提供了示例。
安装
在您的 composer.json 中要求 groovili/rest-uploader-bundle
包并更新您的依赖项。
composer require groovili/rest-uploader-bundle
将 RestUploaderBundle 添加到您的应用程序的内核中
public function registerBundles() { $bundles = [ // ... new Groovili\RestUploaderBundle\RestUploaderBundle(), // ... ]; // ... }
请注意,为了使用 RestFileType,应将 csrf_protection
设置为 false
。
配置
public_dir
和 private_dir
是从 app 文件夹的路径字符串。如果不存在,将自动添加。这些参数应该是字符串。
allowed_extensions
是包含允许的文件扩展名的字符串数组。
file_max_size
是以 MB 为单位的整数,表示最大限制。
以下提供的配置是此扩展包的默认配置
rest_uploader: public_dir: '../web/files' private_dir: '../private' allowed_extensions: [] file_max_size: 25
示例
用于文件上传的 RestFileType
<?php /** @var @UploadedFile $upload */ $upload = $request->files->get('file'); if (isset($upload)) { $form = $this->createFormBuilder() ->add('file', RestFileType::class, [ 'allow_delete' => true, 'validate_extensions' => true, 'validate_size' => true, 'private' => false, ]) ->getForm(); $form->handleRequest($request); $clearMissing = $request->getMethod() != 'PATCH'; $form->submit(['file' => $upload], $clearMissing); $data = $form->getData(); if (isset($data['file'])) { /** @var File $file */ $file = $data['file']; $em = $this->getDoctrine()->getManager(); $em->persist($file); $em->flush(); } }
提交现有实体的 RestFileType
<?php /** * $file = ['file' => ['id' => 8]] */ $file = json_decode($request->getContent(), true); $form = $this->createFormBuilder() ->add('file', RestFileType::class, [ 'allow_delete' => true, 'validate_extensions' => true, 'validate_size' => true, 'private' => false, ]) ->getForm(); $form->handleRequest($request); $clearMissing = $request->getMethod() != 'PATCH'; $form->submit($file , $clearMissing);
删除现有实体的 RestFileType
<?php /** * $file = ['file' => ['id' => 8, 'delete' => true]] */ $file = json_decode($request->getContent(), true); $form = $this->createFormBuilder() ->add('file', RestFileType::class, [ 'allow_delete' => true, 'validate_extensions' => true, 'validate_size' => true, 'private' => false, ]) ->getForm(); $form->handleRequest($request); $clearMissing = $request->getMethod() != 'PATCH'; $form->submit($file , $clearMissing); $em = $this->getDoctrine()->getManager(); $em->flush();
通过服务上传和验证文件
<?php /** @var @UploadedFile $upload */ $upload = $request->files->get('file'); if (isset($upload)) { $validator = $this->container->get('rest_uploader.validator'); $uploader = $this->container->get('rest_uploader.manager'); if ($validator->isExtensionAllowed($upload) && $validator->isSizeValid($upload)){ /** @var File $file */ $file = $uploader->upload($upload, false); } }
将包路由添加到您的 routing.yml
file: resource: '@RestUploaderBundle/Resources/config/routing.yml' type: yaml