thyseus / yii2-files
为Yii2提供通用文件上传管理
Requires
- kartik-v/yii2-widget-fileinput: 1.0.*
- yiisoft/yii2: ^2.0.0
- yiisoft/yii2-bootstrap: ^2.0.0
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
});
路由
您可以使用以下路由访问文件模块
- 查看当前登录用户的所有文件:https://your-domain/files/files/index
- 查看:https://your-domain/files/files/view?id=
- 更新:'files/update/'
- 删除:'files/delete/'
- 查看:'files/'
许可证
Yii2-files在GPLv3许可证下发布。