zoukankan      html  css  js  c++  java
  • yii2: 上传图片,生成目录

    1、单个文件上传

    首先建立一个模型models/UploadForm.php,内容如下

    namespace appmodels;
    
    use yiiaseModel;
    use yiiwebUploadedFile;
    
    /**
     * UploadForm is the model behind the upload form.
     */
    class UploadForm extends Model
    {
        /**
         * @var UploadedFile file attribute
         */
        public $file;
    
        /**
         * @return array the validation rules.
         */
        public function rules()
        {
            return [
                [['file'], 'file'],
            ];
        }
    }
    

      

    再建立一个视图文件,内容如下

    <?php
    use yiiwidgetsActiveForm;
    ?>
    
    <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
    
    <?= $form->field($model, 'file')->fileInput() ?>
    
    <button>Submit</button>
    
    <?php ActiveForm::end() ?>
    

      

    最后建立控制器文件,内容如下

    namespace appcontrollers;
    
    use Yii;
    use yiiwebController;
    use appmodelsUploadForm;
    use yiiwebUploadedFile;
    
    class SiteController extends Controller
    {
        public function actionUpload()
        {
            $model = new UploadForm();
    
            if (Yii::$app->request->isPost) {
                $model->file = UploadedFile::getInstance($model, 'file');
    
                if ($model->file && $model->validate()) {                
                    $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension);
                }
            }
    
            return $this->render('upload', ['model' => $model]);
        }
    }
    

      

    注意这里我们没有用model->load(...),而是用了UploadedFile::getInstance(...)。区别是后者不会执行$model->validate(),所以需要手动的去执行$model->validate()来检验数据的合法性。如果检验通过了,上传的文件保存在uploads文件夹下,即web目录下的uploads里。

    一些可选的配置选项
    上传文件不能为空

    public function rules()
    {
        return [
            [['file'], 'file', 'skipOnEmpty' => false],
        ];
    }
    

      

    上传类型,不仅可以根据扩展名检验,还可以根据文件的内容进行检验

    public function rules()
    {
        return [
            [['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',],
        ];
    }
    

      

    目录生成:

    /**
         * 上传图片
         * @return string
         */
        private function uploadPic()
        {
            //是否上传图片
            //upload
            $file_img = '';
            $file_name = md5(time());
            $path = 'uploads/'.date("Y").'/'.date("m").'/'.date('d').'/';
            if (!file_exists($path)) {
                    $this->createDir($path);
            }
            if (Yii::$app->request->isPost) {
                $model = new WexinUploadForm();
                $model->file = UploadedFile::getInstance($model, 'file');
    
                if ($model->file && $model->validate()) {
                    $back = $model->file->saveAs($path .$file_name.  '.' . $model->file->extension);
                    if($back)
                        $file_img = $path .$file_name. '.' . $model->file->extension;
                }
            }
            return $file_img;
        }
    
        /**
         * 递归:生成目录
         */
        private function createDir($str)
        {
            $arr = explode('/', $str);
            if(!empty($arr))
            {
                $path = '';
                foreach($arr as $k=>$v)
                {
                    $path .= $v.'/';
                    if (!file_exists($path)) {
                        mkdir($path, 0777);
                        chmod($path, 0777);
                    }
                }
            }
        }
    

      

  • 相关阅读:
    使用nexus 管理pip 私有包
    gitingore && opensource license 自动生成的网站
    lua-resty-qless-web UI 界面运行
    自定义pip 包开发简单说明
    ethr 微软开源的tcp udp http 网络性能测试工具
    openresty 集成lua-resty-mail +smtp2http 扩展灵活的mail 服务
    masterlab 敏捷项目管理工具
    luarocks 自定义包发布试用
    vorpal 又一个方便的cli 开发包
    gogs wekan 集成试用
  • 原文地址:https://www.cnblogs.com/achengmu/p/6729461.html
Copyright © 2011-2022 走看看