ondrs / upload-manager
Nette 框架的上传管理器
Requires
- php: >=7.1
- ext-exif: *
- ext-gd: *
- ext-intl: *
- guzzlehttp/guzzle: ~6.5.5
- nette/bootstrap: ^3.0
- nette/di: ^3.0
- nette/finder: ^v2.5|^3.0
- nette/http: ^3.0
- nette/utils: ^3.0
Requires (Dev)
- mockery/mockery: ^1.3
- nette/tester: ^2.4
README
Nette 框架的上传管理器
安装
composer.json
"ondrs/upload-manager": "v8.0.0"
配置
注册扩展
extensions: uploadManager: ondrs\UploadManager\DI\Extension
最小配置
uploadManager: relativePath: '/uploads'
完整配置
uploadManager: basePath: %wwwDir% relativePath: '/uploads' fileManager: blacklist: {php} imageManager: maxSize: 1280 type: jpg quality: 80 saveOriginal: FALSE dimensions: 800: - {800, NULL} - shrink_only 500: - {500, NULL} - shrink_only 250: - {250, NULL} - shrink_only thumb: - {100, NULL} - shrink_only
在大多数情况下,您希望选择 wwwDir
作为您的 basePath
(默认选择),以便使您的文件公开可访问。relativePath
是相对于 basePath
的,因此您的文件将上传到的完整路径如下所示
{basePath}/{relativePath}[/{dir}]
dir
是一个可选参数,您可以在脚本的运行时通过 listen()
或在 upload()
方法中设置它。
文件管理器
- 黑名单
- 黑名单中的文件扩展名数组,默认为 php
图像管理器
-
maxSize
- 图像的最大大小,如果它更大,它将被自动调整到这个大小
- 可以是图像的 X 坐标
- 或数组 [X, Y]
-
尺寸
-
要调整图像大小的尺寸数组
-
格式是
PREFIX: - {X_SIZE, Y_SIZE} - RESIZE_OPTION
-
PREFIX
可以是您想要的任何内容,它将被添加到调整大小的文件中:PREFIX_file.jpg
-
Y_SIZE
以及RESIZE_OPTION
都是可选的 -
RESIZE_OPTION
默认设置为Image::SHRINK_ONLY
-
例如,我们将根据上述完整配置设置 UploadManager。
$this->upload->filesToDir('dir/path')
上传一个大小为 (1680 x 1050) 的图像文件 foo.jpg
将生成 5 个文件:foo.jpg, 800_foo.jpg, 500_.jpg, 250_foo.jpg, thumb_foo.jpg
,这些文件将保存在 %wwwDir%/uploads/super/dir
中。所有文件都将根据它们的 X 维度成比例调整大小,并使用相应的前缀保存。foo.jpg 被认为是原始文件,但调整到 1280px。
使用方法
将 ondrs\UploadManager\Upload
注入到您的 presenter 或您想要的地方
/** @var \ondrs\UploadManager\Upload @inject public $upload;
然后执行上传。
public function renderUpload() { $this->upload->filesToDir('path/to/dir'); }
如果您只想上传单个文件(例如,使用表单),请调用 singleFileToDir()
方法
public function processForm($form) { /** @var Nette\Http\FileUpload */ $fileUpload = $form->values->file; $this->upload->singleFileToDir('path/to/dir', $fileUpload); }
事件
真正的乐趣来自于事件。它们在这里帮助您轻松地控制和监控您的上传过程。
-
onQueueBegin
- 在上传开始之前调用
- 接受一个参数
- 将上传的 Nette\Http\FileUpload 对象数组
-
onQueueComplete
- 上传完成后调用
- 接受两个参数
- Nette\Http\FileUpload 数组
- \SplFileInfo 对象数组,表示已上传
-
onFileBegin
- 在 每个文件 上传之前调用
- 接受两个参数
- Nette\Http\FileUpload
- 构造为
{relativePath}[/{dir}]
的目录
-
onFileComplete
- 在 每个文件 上传完成后调用
- 接受三个参数
- 原始文件 的 Nette\Http\FileUpload 对象
- 上传文件 的 \SplFileInfo 对象
- 构造为
{relativePath}[/{dir}]
的目录
真实世界示例
/** * @param int $eventId */ public function uploadAttachment($eventId) { /** * @param FileUpload $fileUpload * @param \SplFileInfo $uploadedFile * @param $path */ $this->upload->onFileComplete[] = function (\SplFileInfo $uploadedFile, FileUpload $fileUpload, $path) use ($eventId) { $filename = $uploadedFile->getFilename(); $this->db->table('crm_attachments') ->insert([ 'filename' => $filename, 'path' => $path, 'crm_events_id' => $eventId, ]); }; /** * @param array $files * @param array $uploadedFiles */ $this->upload->onQueueComplete[] = function(array $files, array $uploadedFiles) use($eventId) { $uploadedFiles = array_map(function($i) { return $i->getFilename(); }, $uploadedFiles); $this->db->table('crm_events') ->wherePrimary($eventId) ->update([ 'text' => implode(';', $uploadedFiles), ]); }; $this->upload->filesToDir('attachments/' . $eventId); }