thyseus/yii2-files

为Yii2提供通用文件上传管理

安装次数: 1,304

依赖项: 0

建议者: 0

安全性: 0

星标: 0

分支: 2

类型:yii2-extension

0.1.0 2017-02-15 09:59 UTC

This package is auto-updated.

Last update: 2024-09-12 03:41:07 UTC


README

为Yii 2框架提供通用文件上传管理器。

文件可以被上传并链接到任何ActiveRecord模型。自0.3.0版本开始,用户可以上传文件而无需链接到模型。

它使用kartik-v/yii2-widget-fileinput小部件(https://github.com/kartik-v/yii2-widget-fileinput)。

它只包含一个数据库表'files',其中存储所有内容。

提供了简单的访问控制。默认情况下,所有文件都上传到一个受保护的文件夹中,并且上传者可以将文件设置为公开给所有人或特定用户。

上传端点设计时考虑了以下文档:http://webtips.krajee.com/ajax-based-file-uploads-using-fileinput-plugin/

目前提供德语和英语翻译。

安装

$ cd /your/project/root
$ composer require thyseus/yii2-files
$ php yii migrate/up --migrationPath=@vendor/thyseus/yii2-files/migrations
$ mkdir uploads/
$ echo '.uploads/' >> .gitignore

安全性

注意,默认情况下,所有符合Yii::$app->user->can('admin')条件的用户都能查看、下载和删除数据库中可用的所有文件。其他用户只能访问他们自己的上传文件以及与其他用户共享的文件。访客只能查看公开文件。

自0.3.0版本起,用户可以与其选择的用户共享文件。为了使此功能正常工作,您需要提供一个具有至少'id'和'username'属性的app\models\User Active Record模型。

重要更新通知

自0.4.0(2017-12-18)起,yii2-files会自动保存每个上传文件的md5校验和。在下载文件时会检查此校验和。请确保已执行迁移,以确保存在'checksum'列。为了更新所有已上传文件的正确校验和,请在yii2-shell中运行以下命令

foreach(thyseus\files\models\File::find()->all() as $file) {
    if (!$file->checksum) {
        $file->updateAttributes(['checksum' => md5(@file_get_contents($file->filename_path))]);
    }
}

配置

将以下行添加到主配置文件中

'modules' => [
    'files' => [
        'class' => 'thyseus\files\FileWebModule',
    ],
],

在您的应用程序中集成

将hasFilesBehavior附加到您想要附加文件的每个ActiveRecord模型上

use \thyseus\files\behaviors\HasFilesBehavior;

    public function behaviors()
    {
        return [
                HasFilesBehavior::class,
                ];
    }

您可以通过以下方式访问附加到ActiveRecord模型的每个上传文件,具体取决于当前登录的用户

$model->files;

您可以使用以下方法渲染一个上传小部件,该小部件将自动将每个上传文件附加到模型上

use yii\helpers\Url;

echo $this->render('@vendor/thyseus/yii2-files/views/file/_upload', [
    'model' => $model,
    'options' => ['multiple' => true], // optional
    'target_url' => Url::to(['agency/view', 'id' => $model->slug]), // optional
    'uploadExtraData' => ['public' => true] // uploaded files are automatically public (default is: protected). optional.
]);

使用

use thyseus\files\models\File;

$model = File::findOne(57);
echo File::downloadLink();

在视图文件中显示“下载文件”按钮。

事件

您可以将事件附加到大多数操作上,例如,当用户获得访问共享文件的权限时发送通知,如下所示

use yii\base\Event;
use thyseus\files\controllers\FileController;

Event::on(FileController::class, FileController::EVENT_AFTER_SHARE_WITH_USER, function ($event) {
    $username = $event->sender->actionParams['username'];
    
    Message::sendNotification($username); // <-- you need to implement this
});

路由

您可以使用以下路由访问文件模块

许可证

Yii2-files在GPLv3许可证下发布。