enjoys/upload

3.0.7 2024-07-17 15:52 UTC

This package is auto-updated.

Last update: 2024-09-17 16:30:11 UTC


README

Mutation testing badge tests static Build Status Scrutinizer Code Quality Code Coverage

文件上传库,使用验证并使用 PSR-7 UploadedFileInterfaceLeague\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();