Yii2文件上传

  首先在app\controllers下建立TestController.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里面显示。

    app\models下建立Upload.php,代码如下:

 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,代码如下:

 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>

其中

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中传过来的参数。

posted @ 2015-09-10 20:31  todaytoday  阅读(2370)  评论(0编辑  收藏  举报