• Yii2文件上传


      首先在appcontrollers下建立TestController.php,内容为如下代码:

     1 <?php
     2 namespace appcontrollers;
     3 use Yii;
     4 use yiiwebController;
     5 use appmodelsUpload;
     6 use yiiwebUploadedFile;
     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 }

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

        appmodels下建立Upload.php,代码如下:

     1 <?php
     2 namespace appmodels;
     3 use Yii;
     4 use yiiaseModel;
     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下建立testupload.php,代码如下:

     1 <?php
     2 use yiihelpersHtml;
     3 use yiiwidgetsActiveForm;
     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中传过来的参数。

  • 相关阅读:
    linux 修改环境变量 vi ~/.bashrc 出错解决办法,很有效
    大体学习框架
    完成spring boot整合ehcache的搭建以支持服务本地堆缓存
    Springboot隐藏某个字段@JSONField(serialize = false)不生效问题解决
    在库存服务中实现缓存与数据库双写一致性保障方案(二)
    restful api版本控制
    手机连接小爱同学音响
    商品详情页结构分析、缓存全量更新问题以及缓存维度化解决方案
    zk安装
    在库存服务中实现缓存与数据库双写一致性保障方案(四)
  • 原文地址:https://www.cnblogs.com/jacson/p/4799056.html
Copyright © 2020-2023  润新知