mdmsoft / yii2-upload-file
Yii2 文件上传工具
2.0
2016-11-07 09:01 UTC
Requires
- yiisoft/yii2: ~2.0
This package is not auto-updated.
Last update: 2024-09-20 21:48:22 UTC
README
Yii2 文件上传工具
安装
安装此扩展的首选方式是通过 composer。
运行以下命令
php composer.phar require mdmsoft/yii2-upload-file "~2.0"
for dev-master
php composer.phar require mdmsoft/yii2-upload-file "dev-master"
或在您的 composer.json
文件的 require 部分添加
"mdmsoft/yii2-upload-file": "~2.0"
使用方法
安装扩展后,通过执行 yii migrate 准备所需的表。
yii migrate --migrationPath=@mdm/upload/migrations
如果您不想使用数据库迁移,可以手动创建所需的表。
CREATE TABLE uploaded_file ( "id" INT NOT NULL AUTO_INCREMENT, "name" VARCHAR(64), "filename" VARCHAR(256), "size" INT, "type" VARCHAR(32), PRIMARY KEY (id) );
按照以下方式修改您的应用程序配置
return [ ... 'controllerMap' => [ 'file' => 'mdm\\upload\\FileController', // use to show or download file ], ];
然后简单修改您的模型类
public function behaviors() { return [ ... [ 'class' => 'mdm\upload\UploadBehavior', 'attribute' => 'file', // required, use to receive input file 'savedAttribute' => 'file_id', // optional, use to link model with saved file. 'uploadPath' => '@common/upload', // saved directory. default to '@runtime/upload' 'autoSave' => true, // when true then uploaded file will be save before ActiveRecord::save() 'autoDelete' => true, // when true then uploaded file will deleted before ActiveRecord::delete() ], ]; }
您不需要将额外的属性 file
添加到模型类中。在控制器中
public function actionCreate() { if($model->load(Yii::$app->request->post()) && $model->save()){ ... } ... }
如果您将 mdm\upload\UploadBehavior::$autoSave
设置为 false
,则必须调用 saveUploadedFile()
。
public function actionCreate() { if($model->load(Yii::$app->request->post()) && $model->validate()){ if($model->saveUploadedFile() !== false){ $model->save(false); .... } ... } ... }
在视图文件中
// in create or update view <?= $form->field($model,'file')->fileInput(); ?> // in view <?= Html::img(['/file','id'=>$model->file_id]) ?> <!-- assume the uploaded file is image ->
不使用附件行为的使用
除了作为行为使用外,您还可以直接使用 FileModel
保存文件。
public function actionCreate() { ... if($model->load(Yii::$app->request->post()) && $model->validate()){ $file = UploadedFile::getInstance($model, 'file'); if($fileModel = FileModel::saveAs($file,['uploadPath' => '@common/upload'])){ $model->fil_id = $fileModel->id; $model->save(); .... } ... } }
但是,您需要将属性 file
添加到模型中。
class MyModel extend ... { public $file; // add this to your model class
- 请参阅 我的博客