Yii2文件上传

  首先在app\controllers下创建TestController.php,内容为以下代码:php

 1 <?php
 2 namespace app\controllers;
 3 use Yii;
 4 use yii\web\Controller;
 5 use app\models\Upload;
 6 use yii\web\UploadedFile;
 7 
 8 class TestController extends  Controller
 9 {
10     public function actionUpload()
11     {
12         $model = new Upload();
13         if (Yii::$app->request->isPost) {
14             $file = UploadedFile::getInstance($model, 'file');
15             $path="uploads/".date("YmdH",time())."/";
16             if ($file && $model->validate()) {
17                 if (!file_exists($path)) {
18                     mkdir($path,0777, true);
19                 }
20                 $file->saveAs($path . time() . '.' . $file->getExtension());
21                 Yii::$app->session->setFlash('success', '上传成功!');
22             }
23         }
24         return $this->render('upload', ['model' => $model]);
25     }
26 }

须要注意的是,当app\web下面没有uploads文件夹时,须要创建,在上述代码中,创建的存储图片的文件夹为 "uploads/".date("YmdH",time())."/" ,由于存在层级目录,因此在使用mkdir()函数的时候,括号内的最后一个参数true必需要填,若是不填,则是表明创建的目录只有一个层级,如 "uploads/" ,这时就不能加上后面的以时间为下一层级的目录了。上述使用mkdir()函数创建的文件夹在app\web下。其中 Yii::$app->session->setFlash('success', '上传成功!'); 是当图片上传成功后,传递上传成功的提示在view里面显示。html

    app\models下创建Upload.php,代码以下:web

 1 <?php
 2 namespace app\models;
 3 use Yii;
 4 use yii\base\Model;
 5 
 6 class Upload extends Model{
 7     public $file;
 8     public function rules(){
 9         return [
10             [['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',],
11         ];
12     }
13     public function attributeLabels(){
14         return [
15             'file'=>'文件上传'
16         ];
17     }
18 } 

 

而后在views下创建test\upload.php,代码以下:session

 1 <?php
 2 use yii\helpers\Html;
 3 use yii\widgets\ActiveForm;
 4 ?>
 5 <!doctype html>
 6 <html lang="en">
 7 <head>
 8     <meta charset="UTF-8">
 9     <title>文件上传</title>
10 </head>
11 <body>
12 <?php if(Yii::$app->session->hasFlash('success')):?>
13     <div class="alert alert-danger">
14         <?=Yii::$app->session->getFlash('success')?>
15     </div>
16 <?php endif ?>
17 <?php $form=ActiveForm::begin([
18     'id'=>'upload',
19     'enableAjaxValidation' => false,
20     'options'=>['enctype'=>'multipart/form-data']
21 ]);
22 ?>
23 <?= $form->field($model, 'file')->fileInput();?>
24 <?=  Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>
25 <?php ActiveForm::end(); ?>
26 
27 </body>
28 </html>

其中app

1 <?php if(Yii::$app->session->hasFlash('success')):?>
2     <div class="alert alert-danger">
3         <?=Yii::$app->session->getFlash('success')?>
4     </div>
5 <?php endif ?>

就是当图片上传成功后,显示从Testcontroller中传过来的参数。yii

相关文章
相关标签/搜索