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

相關文章
相關標籤/搜索