ns / file-upload-bundle
此组件提供简单的文件上传功能
Requires
- php: >=8.1
- ircmaxell/random-lib: ^1.1
- symfony/asset: ^6.0
- symfony/form: ^6.0
- symfony/framework-bundle: ^6.0
- twig/twig: ^2.0||^3.0
Requires (Dev)
- liip/rmt: ^1.7
- phpunit/phpunit: ^9.5
- symfony/http-foundation: ^6.0
README
这是一个处理文件上传和URL生成的简单组件。
安装
通过 Composer
$ composer require ns/file-upload-bundle
配置
定义配置
配置被定义为服务。对于每个命名/文件位置定义一个标记服务。您可以选择提供的任何文件命名器,或者实现自己的。第二个和第三个参数只需其中一个即可,但两者都可以使用。
# services.yml
ns_file.applicant_uploads:
class: NS\FileUploadBundle\Handler\Config
arguments: [ "@ns_file.namer.default", "applicant-uploads", "@ns_file.directory_namer.hash" ]
tags:
- { name: ns_file.config, config_name: applicant }
根据上述配置。使用此配置上传的文件将存储在 web/uploads/applicant-uploads/HASH/ClientOriginalName_RANDSTR.ext
您可以自由实现自己的文件和/或目录命名器。只需实现 NS\FileUploadBundle\Namer\FileNamerInterface 或 NS\FileUploadBundle\Namer\DirectoryNamerInterface。
该组件包含以下文件命名策略。
OriginalNamer
此命名器将上传的文件使用客户端上传时提供的名称存储。服务 id @ns_file.namer.client_original
OriginalRandomNamer
类似于 OriginalNamer,此命名器将保持原始文件名,但在名称之后但在文件扩展名之前插入随机字符和数字。这是 默认 文件命名器。服务 id @ns_file.namer.original_random
RandomNamer
此命名器将文件重命名为随机字符串,但保留原始文件扩展名。服务 id @ns_file.namer.random
UniqueHashNamer
此命名器对原始客户端名称执行 sha1 哈希,并使用该哈希加上原始文件扩展名。服务 id @ns_file.namer.unique_hash
使用方法
处理文件上传时。简单请求上传处理服务。传递给该服务一个已上传文件的实例,配置以及可选的任何其他数据,这些数据将用于目录命名器。
上传处理
// $applicantEmailAddress = 'user@example.com'; // instanceof UploadedFile with clientOriginalName 'funny-cat-image.jpg' $sourceFile = $form['somefile']->getData(); $handler = $this->get('ns_file.upload_handler'); $destinationFile = $handler->upload('applicant', $sourceFile, $applicantEmailAddress);
根据我们上面的示例配置,将源文件放置在 web/uploads/applicant-uploads/63a710569261a24b3766275b7000ce8d7b32e2f7/funny-cat-image_xx12xa.jpg。然后,它将返回此文件的 File 实例。您可以将文件名保存为所需的任何方式。
下载 / Twig
有一个twig助手,可以生成任何给定文件的下载URL。
<a href="{{ file_path('applicant', 'funny-cat-image_xx12xa.jpg', 'user@example.com') }}">Download</a>
提供指向此文件的链接。
许可证
MIT,请参阅 LICENSE。