enjoys / upload
Requires
- php: ^8.0
- league/flysystem: ^3.0
- psr/http-message: ^1.0 | ^2.0
Requires (Dev)
- guzzlehttp/psr7: ^2.4
- infection/infection: ^0.26
- league/flysystem-memory: ^3.0
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.24
README
文件上传库,使用验证并使用 PSR-7 UploadedFileInterface 和 League\Flysystem 作为文件存储库
安装
此包需要 PHP 版本 8.0 或更高版本。
此包可通过 Composer 获取
composer require enjoys/upload:^3.0
使用方法
use Psr\Http\Message\ServerRequestInterface; /** @var Psr\Http\Message\UploadedFileInterface $uploadedFile */ /** @var League\Flysystem\Filesystem $filesystem */ $file = new Enjoys\Upload\UploadProcessing($uploadedFile, $filesystem); try { $file->upload(); }catch (\Exception $e){ // handle exception }
验证
目前有 3 个验证规则,但如果需要特定的验证,可以通过实现 Enjoys\Upload\RuleInterface 接口来编写规则
- 扩展(Enjoys\Upload\Rule\Extension)
- 大小(Enjoys\Upload\Rule\Size)
- 媒体类型(Enjoys\Upload\Rule\MediaType)
/** @var Enjoys\Upload\UploadProcessing $file */ /** @var Enjoys\Upload\RuleInterface $rule */ // ... set rule before called $file->upload() $file->addRule($rule); $file->upload();
扩展规则
允许扩展不区分大小写
$rule = new Enjoys\Upload\Rule\Extension(); $rule->allow('png'); // or $rule->allow('png, jpg'); // or $rule->allow(['png','jpg']);
大小规则
$rule = new Enjoys\Upload\Rule\Size(); $rule->setMaxSize(10*1024*1024) ->setMinSize(1*1024*1024); // in bytes
媒体类型规则
$rule = new Enjoys\Upload\Rule\MediaType(); $rule->allow('image/*') ->allow('application/pdf') // ... ;
方法
Enjoys\Upload\UploadProcessing::class
setFilename(filename: string)
设置上传文件的新的文件名。 在上传之前调用。
/** @var Enjoys\Upload\UploadProcessing $file */ $file->setFilename('name');
addRule(rule: Enjoys\Upload\RuleInterface)
在上传之前调用。
/** @var Enjoys\Upload\UploadProcessing $file */ /** @var Enjoys\Upload\RuleInterface $rule */ $file->addRule($rule);
addRules(rules: Enjoys\Upload\RuleInterface[])
在上传之前调用。
/** @var Enjoys\Upload\UploadProcessing $file */ /** @var Enjoys\Upload\RuleInterface[] $rules */ $file->addRules($rules);
upload(targetPath: string)
/** @var Enjoys\Upload\UploadProcessing $file */ $file->upload(); // $file->upload('sub_directory');
getTargetPath()
在上传之后调用。返回类似于文件系统中的位置。如果在上传之前调用,则返回 null
。
/** @var Enjoys\Upload\UploadProcessing $file */ $file->getTargetPath(); // return null or string
getFilesystem()
返回 League\Flysystem\Filesystem::class
/** @var Enjoys\Upload\UploadProcessing $file */ $file->getFilesystem();
getUploadedFile()
返回 Psr\Http\Message\UploadedFileInterface::class
/** @var Enjoys\Upload\UploadProcessing $file */ $file->getUploadedFile();
getFileInfo()
返回 Enjoys\Upload\FileInfo::class
/** @var Enjoys\Upload\UploadProcessing $file */ $file->getFileInfo();
Enjoys\Upload\FileInfo::class
getFilename()
返回完整文件名,例如 new_file_name.jpg
/** @var Enjoys\Upload\FileInfo $fileInfo */ $fileInfo->getFilename();
getOriginalFilename()
返回原始文件名,例如 original_file_name.jpg
/** @var Enjoys\Upload\FileInfo $fileInfo */ $fileInfo->getOriginalFilename();
getFilenameWithoutExtension()
返回不带扩展名的文件名,例如 new_file_name
/** @var Enjoys\Upload\FileInfo $fileInfo */ $fileInfo->getFilenameWithoutExtension();
getExtension()
返回扩展名,例如 jpg
/** @var Enjoys\Upload\FileInfo $fileInfo */ $fileInfo->getExtension();
getExtensionWithDot()
返回带点的扩展名,例如 .jpg
/** @var Enjoys\Upload\FileInfo $fileInfo */ $fileInfo->getExtensionWithDot();
getSize()
返回字节数的文件大小,例如 102435
/** @var Enjoys\Upload\FileInfo $fileInfo */ $fileInfo->getSize();
getMediaType()
返回媒体类型,由客户端扩展确定,例如 image/jpg
/** @var Enjoys\Upload\FileInfo $fileInfo */ $fileInfo->getMediaType();