氰戊菊酯/yiiflow

使用flowjs上传文件

安装: 425

依赖: 0

建议者: 0

安全: 0

星星: 1

观察者: 2

分支: 0

公开问题: 1

语言:JavaScript

类型:yii2-extension

0.1.0 2016-01-11 04:47 UTC

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\UploadActioncyhalothrin\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选项进行更改。