slince / upload
Process file uploads with multiple and extensible validation rules
Installs: 7 689
Dependents: 1
Suggesters: 0
Security: 0
Stars: 4
Watchers: 2
Forks: 3
Open Issues: 0
Requires
- php: >=8.1
- symfony/http-foundation: ^3.4|^4.0|^5.0|^6.0
- symfony/mime: ^3.4|^4.0|^5.0|^6.0
Requires (Dev)
- phpunit/phpunit: ^8.0|^9.0
Suggests
- league/flysystem: Integrate with flysystem
This package is auto-updated.
Last update: 2024-10-23 18:52:21 UTC
README
Process uploaded files with multiple and extensible validation rules.
Installation
Install via composer
$ composer require slince/upload
Quick view
$builder = new Slince\Upload\UploadHandlerBuilder(); //create a builder. $handler = $builder ->saveTo(__DIR__ . '/dst') ->getHandler(); $files = $handler->handle(); print_r($files);
Usage
Assume files are uploaded with this HTML form:
<form method="POST" enctype="multipart/form-data"> <input type="file" name="foo" value=""/> <input type="file" name="bar[baz][]" value=""/> <input type="file" name="bar[baz][]" value=""/> <input type="submit" value="Upload File"/> </form>
Server:
$builder = new Slince\Upload\UploadHandlerBuilder(); //create a builder. $handler = $builder ->overwrite(true) // open overwrite mode. //Custom namer ->naming(function (UploadedFile $file) { return date('Y/md') . '/' . uniqid() . '.' . $file->getClientOriginalExtension(); }) //add constraints ->sizeBetween('10m', '20m') ->allowExtensions(['jpg', 'txt']) ->allowMimeTypes(['image/*', 'text/plain']) ->saveTo(__DIR__ . '/dst') //save to local ->getHandler(); $files = $handler->handle(); foreach ($files as $file) { $uploadedFile = $file->getUploadedFile(); if ($file->isUploaded()) { echo $uploadedFile->getClientOriginalName() . ' upload ok, path:' . $file->getMetadata('spl_file')->getPathname(); } else { echo $uploadedFile->getClientOriginalName() . ' upload error: ' . $file->getException()->getMessage(); } echo PHP_EOL; }
File metadata $file->getMetadata('metadata name')
is provided by storage layer.
if you are using Local
, the file has a metadata named 'spl_file', it is an instance of SplFileInfo
.
If you want access attributes of the file saved in the client, you can use like this.
$files['foo']->getUploadedFile()->getClientOriginalName(); // original name $files['bar']['baz'][0]->getUploadedFile()->getClientOriginalExtension(); // original extension $files['bar']['baz'][1]->getUploadedFile()->getClientMimeType(); // original mime type
Integration with flysystem
function createS3Flysystem() { $client = new Aws\S3\S3Client([ 'credentials' => [ 'key' => 'your-key', 'secret' => 'your-secret' ], 'region' => 'your-region', 'version' => 'latest|version', ]); $adapter = new League\Flysystem\AwsS3v3\AwsS3Adapter($client, 'your-bucket-name'); $flysystem = new League\Flysystem\Filesystem($adapter); return $flysystem; } $builder = new Slince\Upload\UploadHandlerBuilder(); //create a builder. $handler = $builder->setFilesystem(new Slince\Upload\Filesystem\Flysystem(createS3Flysystem())) ->getHandler(); $files = $handler->handle(); print_r($files);
All files will be automatically uploaded to AWS S3.
License
The MIT license. See MIT