氰戊菊酯 / yiiflow
使用flowjs上传文件
0.1.0
2016-01-11 04:47 UTC
Requires
- bower-asset/flow.js: ~2
- flowjs/flow-php-server: ^1.0
- yiisoft/yii2: >=2.0.5
This package is not auto-updated.
Last update: 2024-09-24 20:24:55 UTC
README
有时需要将大文件附加到表单中,此时请求可能会非常慢,服务器可能会拒绝请求,因为超时或文件大小超出限制。Yiiflow允许将文件上传到服务器并在表单提交后保存它们。使用flow.js发送文件。显示文件上传进度,并支持取消。保存了与yii\web\UploadedFile
的兼容性。
安装
composer require cyhalothrin/yiiflow
配置
在应用程序容器中注册Flow\ConfigInterface
并指定临时文件保存目录
class AppBootstrap implements yii\base\BootstrapInterface { public function bootstrap($app) { \Yii::$container->set( 'Flow\ConfigInterface', function () { $config = new Flow\Config(); $config->setTempDir(Yii::getAlias('pathToChunksTempDir')); return $config; } ); } }
有关额外设置的详细信息,请参阅此处。
使用
可以在应用程序配置中指定用于处理文件上传的控制器
'controllerMap' => [ 'flow' => 'cyhalothrin\yiiflow\controllers\FlowController', ],
或在任何控制器中的actions()
指定cyhalothrin\yiiflow\components\UploadAction
和cyhalothrin\yiiflow\components\DeleteAction
。
然后在表单中设置小部件\cyhalothrin\yiiflowFlowFileInput
\cyhalothrin\yiiflowFlowFileInput::widget([ 'name' => 'file', 'value' => $file, // необходимо восстанавливать значение 'uploadAction' => ['/flow/upload'], 'deleteAction' => ['/flow/delete'], 'pluginOptions' => [ 'flowOptions' => [ // конфигурация flow.js ], ], ]);
对于ActiveForm
$form->field($model, 'files')->widget('\cyhalothrin\yiiflowFlow\FileInput', [ // config ]);
可以通过Yii的传统方式获取提交后的文件
$files = \cyhalothrin\yiiflow\UploadedFile::getInstancesByName('files');
或对于模型
$model->files = \cyhalothrin\yiiflow\UploadedFile::getInstances($model, 'files');
注意:获取单个文件的方法目前不起作用,但我不认为这在当前扩展的上下文中有意义。
接下来的验证和保存文件的操作与标准的yii\web\UploadedFile
相同。
清理临时文件
上传的文件片段以及文件本身都存储在配置中指定的目录中。由于某些原因,这些文件可能无法从该目录移动,因此需要清理它。为此,有一个可以通过cron运行的命令行工具。
'controllerMap' => [ 'cleaning' => 'cyhalothrin\yiiflow\commands\CleaningController', ],
并启动它
php yii cleaning
默认情况下,删除两天前的文件,但可以通过控制器中的expirationTime
选项进行更改。