首先在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