yii2文件上传使用到yii2自带的文件上传类UploadFIle,以及对应的模型规则,这里分别介绍单文件上传和多文件上传:
yii2单个文件上传:
上传步奏,先创建上传表单模型model(包含验证规则),其次控制器操作action,以及相对应的view:
model层:
Upload.PHP [单文件上传模型]
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2015/2/12
- * Time: 12:18
- */
- namespace app\models;
- use Yii;
- use yii\base\Model;
- class Upload extends Model{
- public $file;
- public function rules(){
- return [
- [['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',],
- ];
- }
- public function attributeLabels(){
- return [
- 'file'=>'文件上传'
- ];
- }
- }
UploadForm.php [多文件上传模型]
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2015/2/13
- * Time: 10:39
- */
- namespace app\models;
- use Yii;
- use yii\base\Model;
- class UploadForm extends Model
- {
- /**
- * @var UploadedFile|Null file attribute
- */
- public $file;
- /**
- * @return array the validation rules.
- */
- public function rules()
- {
- return [
- [['file'], 'file', 'maxFiles' => 10,'extensions'=>'jpg,png,gif'],
- ];
- }
- public function attributeLabels(){
- return [
- 'file'=>'多文件上传'
- ];
- }
- }
Controller层,以TestController中的upload操作和upmore操作
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2015/2/11
- * Time: 16:18
- */
- namespace app\controllers;
- use Yii;
- use yii\web\Controller;
- use app\models\Upload;
- use app\models\UploadForm;
- use yii\web\UploadedFile;
- class TestController extends Controller{
- public function actionIndex(){
- return $this->renderPartial('index');
- }
- /**
- * @return string|\yii\web\Response
- * 单文件上传
- */
- public function actionUpload(){
- $model= new Upload();
- if (Yii::$app->request->isPost) {
- $file = UploadedFile::getInstance($model, 'file');
- $path='uploads/'.date("YmdH",time()).'/';
- if ($file && $model->validate()) {
- if(!file_exists($path)){
- mkdir($path,0775,true);
- }
- $file->saveAs($path . time() . '.' . $file->getExtension());
- Yii::$app->session->setFlash('success','上传成功!');
- return $this->redirect('upload');
- }
- }
- return $this->render('upload',['model'=>$model]);
- }
- public function actionUpmore(){
- $model = new UploadForm();
- if (Yii::$app->request->isPost) {
- $file = UploadedFile::getInstances($model, 'file');
- if ($file && $model->validate()) {
- echo "<pre/>";
- foreach ($file as $fl) {
- $fl->saveAs('uploads/' .mt_rand(1100,9900) .time() .$fl->baseName. '.' . $fl->extension);
- }
- Yii::$app->session->setFlash('success','上传成功!');
- return $this->redirect('upmore');
- }
- }
- return $this->render('upmore', ['model' => $model]);
- }
- }
view:层
[单文件view uplod.php]
- <?php
- use yii\helpers\Html;
- use yii\widgets\ActiveForm;
- ?>
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Document</title>
- </head>
- <body>
- <h4>文件上传</h4>
- <?php if(Yii::$app->session->hasFlash('success')):?>
- <div class="alert alert-danger">
- <?=Yii::$app->session->getFlash('success')?>
- </div>
- <?php endif ?>
- <?php $form=ActiveForm::begin([
- 'id'=>'upload',
- 'enableAjaxValidation' => false,
- 'options'=>['enctype'=>'multipart/form-data']
- ]);
- ?>
- <?= $form->field($model, 'file')->fileInput();?>
- <?= Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>
- <?php ActiveForm::end(); ?>
- </body>
- </html>
[多文件view upmore.php]
- <?php
- use yii\helpers\Html;
- use yii\widgets\ActiveForm;
- ?>
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Document</title>
- </head>
- <body>
- <h4>多文件上传</h4>
- <?php if(Yii::$app->session->hasFlash('success')):?>
- <div class="alert alert-danger">
- <?=Yii::$app->session->getFlash('success')?>
- </div>
- <?php endif ?>
- <?php $form=ActiveForm::begin([
- 'id'=>'upload',
- 'enableAjaxValidation' => false,
- 'options'=>['enctype'=>'multipart/form-data']
- ]);
- ?>
- <?= $form->field($model, 'file[]')->fileInput(['multiple' => true]);?>
- <?= Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>
- <?php ActiveForm::end(); ?>
- </body>