davidxu / yii2-dropzone
为 Yii2 的文件上传扩展程序
3.0.0
2024-06-24 06:41 UTC
Requires
- php: >=8.0
- davidxu/yii2-adminlte4: ^1.0.0
- npm-asset/dropzone: ^5.9.3
- yiisoft/yii2: ^2.0.13
Suggests
- overtrue/flysystem-qiniu: ^3.1
- php-ffmpeg/php-ffmpeg: ^1.0
This package is auto-updated.
Last update: 2024-09-24 07:12:02 UTC
README
为 Yii2 的文件上传扩展程序
安装
这是 v3.0 版本,它支持一页上有多个 dropzone 实例,并且使用 bootstrap5;如果确保每页只有一个实例,您仍然可以使用 v1.0 版本。
您目前可以上传文件到本地服务器或七牛云存储。
推荐通过 Composer 安装此扩展。
运行以下命令:
php composer.phar require --prefer-dist davidxu/yii2-dropzone "^3.0.0"
或者
"davidxu/yii2-dropzone": "^3.0.0"
将以下内容添加到您的 composer.json 文件的 require 部分:
用法
如果您想将文件信息存储在数据库中,请通过以下命令执行迁移文件:
yii migrate/up @davidxu/dropzone/migrations
然后在您的代码中简单使用它:
本地上传
在视图
<?php use davidxu\dropzone\Dropzone; use yii\helpers\Url; // Important: register DropzoneAsset first on page use davidxu\dropzone\assets\DropzoneAsset; DropzoneAsset::register($this); // without ActiveForm echo Dropzone::widget([ 'model' => $model, 'attribute' => 'image_src', 'name' => 'image_src', // If no model and attribute pointed 'url' => Url::to('@web/upload/local'), 'maxFiles' => 3, 'acceptedFiles' => 'image/*', 'uploadBasePath' => 'uploads/', // for single file, 'existFiles' => [ 'id' => 1, 'name' => 'some_name.jpg', 'path' => 'some_path_for_file', 'size' => 1111, ], // for multiple files // 'existFiles' => [ // [ // 'id' => 1, // 'name' => 'some_name.jpg', // 'path' => 'some_path_for_file', // 'size' => 1111, // ], [ // 'id' => 2, // 'name' => 'some_other_name.jpg', // 'path' => 'some_path_for_other_file', // 'size' => 2222, // ], // ], 'storeInDB' => true, // return file id in DB to image url instead of file url if true, migrate model db first. default false 'metaData' => ['foo' => 'bar',], 'crop' => true, // default false, if true, the 'maxFiles' will be forced to 1 ]); ?> <?php // with ActiveForm echo $form->field($model, 'image_src') ->widget(Dropzone::class, [ 'url' => Url::to('@web/upload/local'), 'maxFiles' => 3, 'acceptedFiles' => 'image/*', 'uploadBasePath' => 'uploads/', // for single file, 'existFiles' => [ 'id' => 1, 'name' => 'some_name.jpg', 'path' => 'some_path_for_file', 'size' => 1111, ], // for multiple files // 'existFiles' => [ // [ // 'id' => 1, // 'name' => 'some_name.jpg', // 'path' => 'some_path_for_file', // 'size' => 1111, // ], [ // 'id' => 2, // 'name' => 'some_other_name.jpg', // 'path' => 'some_path_for_other_file', // 'size' => 2222, // ], // ], // .... ]);?>
在上传控制器
use davidxu\adminlte4\actions\LocalAction; use davidxu\adminlte4\models\Attachment; use yii\web\Controller; class UploadController extends Controller { public function actions(): array { $actions = parent::actions(); return ArrayHelper::merge([ 'local' => [ 'class' => LocalAction::class, 'url' => Yii::getAlias('@web/uploads'), // default: '@web/uploads'. stored file base url, 'fileDir' => Yii::getAlias('@webroot/uploads'), // default: '@webroot/uploads'. file store in this dirctory, 'allowAnony' => true, // default false 'attachmentModel' => Attachment::class, ], ], $actions); } }
七牛云上传
在视图
<?php use davidxu\dropzone\Dropzone; use davidxu\adminlte4\enums\QiniuUploadRegionEnum; use davidxu\adminlte4\enums\UploadTypeEnum; use yii\helpers\Url; // Important: register DropzoneAsset first on page use davidxu\dropzone\assets\DropzoneAsset; DropzoneAsset::register($this); echo Dropzone::widget([ 'model' => $model, 'attribute' => 'image_src', 'name' => 'image_src', // If no model and attribute pointed 'url' => QiniuUploadRegionEnum::getValue(QiniuUploadRegionEnum::EC_ZHEJIANG_2), 'drive' => UploadTypeEnum::DRIVE_QINIU, // ...... (refer to local config in view) ]); ?> <?php // with ActiveForm echo $form->field($model, 'image_src') ->widget(Dropzone::class, [ 'url' => QiniuUploadRegionEnum::getValue(QiniuUploadRegionEnum::EC_ZHEJIANG_2), 'drive' => UploadTypeEnum::DRIVE_QINIU, 'qiniuBucket' => Yii::$app->params['qiniu.bucket'], 'qiniuAccessKey' => Yii::$app->params['qiniu.bucket'], 'qiniuSecretKey' => Yii::$app->params['qiniu.bucket'], 'qiniuCallbackUrl' => Yii::$app->params['qiniu.bucket'], // default 'qiniuCallbackBody' here, you can modify them. // 'qiniuCallbackBody' => [ // 'drive' => UploadTypeEnum::DRIVE_QINIU, // 'specific_type' => '$(mimeType)', // 'file_type' => '$(x:file_type)', // 'path' => '$(key)', // 'hash' => '$(etag)', // 'size' => '$(fsize)', // 'name' => '$(fname)', // 'extension' => '$(ext)', // 'member_id' => '$(x:member_id)', // 'width' => '$(imageInfo.width)', // 'height' => '$(imageInfo.height)', // 'duration' => '$(avinfo.format.duration)', // 'store_in_db' => '$(x:store_in_db)', // 'upload_ip' => '$(x:upload_ip)', // ]; // ...... (refer to local config in view) ]);?>
在上传控制器
use davidxu\adminlte4\actions\QiniuAction; use davidxu\adminlte4\models\Attachment; use yii\web\Controller; use yii\web\BadRequestHttpException; class UploadController extends Controller { /** * @throws BadRequestHttpException */ public function beforeAction($action): bool { $currentAction = $action->id; $novalidateActions = ['qiniu']; if(in_array($currentAction, $novalidateActions)) { // disable CSRF validation $action->controller->enableCsrfValidation = false; } parent::beforeAction($action); return true; } public function actions(): array { $actions = parent::actions(); return ArrayHelper::merge([ 'qiniu' => [ 'class' => QiniuAction::class, 'url' => Yii::getAlias('@web/uploads'), // default: '@web/uploads'. stored file base url, 'allowAnony' => true, // default false 'attachmentModel' => Attachment::class, ], ], $actions); } }
祝您玩得开心!