资讯专栏INFORMATION COLUMN

YII2文件上传验证,简单封装

BigTomato / 325人阅读

摘要:上传使用插件官方文档也参考了插件参数比较多。前台表单部分,可以参照具体例子写就行了。

上传使用FileInput插件
官方文档 http://demos.krajee.com/widge...
也参考了 http://www.manks.top/yii2_mul...
插件参数比较多。前台表单部分,可以参照具体例子写就行了。

主要是上传之后的处理和验证,验证文件的类型,大小等,我写了一个公共方法来处理上传

/**
     * 文件上传
     * ```
     *  $model = new UploadValidate($config_name);
     *  $result = CommonHelper::myUpload($model, $field, "invoice");
     * ```
     *
     * @param  object $model commonmodelsUploadValidate 验证上传文件
     * @param  string $field 上传字段名称
     * @param  string $path  文件保存路径
     *
     * @return bool|array
     */
    public static function myUpload($model, $field, $path = "")
    {
        $upload_path = Yii::$app->params["upload_path"];
        $path = $path ? $path . "/" : "";
        if (Yii::$app->request->isPost) {
            $file = UploadedFile::getInstanceByName($field);
            $model->file = $file;
            //文件上传存放的目录
            $dir = $upload_path . $path . date("Ymd");
            if ( !is_dir($dir)) {
                mkdir($dir, 0777, true);
                chmod($dir, 0777);
            }
            if ($model->validate()) {
                //生成文件名
                $rand_name = rand(1000, 9999);
                $fileName = date("YmdHis") . $rand_name . "_" . $model->file->baseName . "." . $model->file->extension;
                $save_dir = $dir . "/" . $fileName;
                $model->file->saveAs($save_dir);
                $uploadSuccessPath = $path . date("Ymd") . "/" . $fileName;
                $result["file_name"] = $model->file->baseName;
                $result["file_path"] = $uploadSuccessPath;
            } else {
                //上传失败记录日志
                self::recordLog($model->errors, $field, "Upload");
                
                return false;
            }
        } else {
            return false;
        }

验证的model类,参数没有写那么多,可以把需要的参数都加上,每个项目或者模块需要用到上传的时候,在配置文件params里配置上相关的参数就可以了

params[$config_name];
        $this->extensions = $upload_config["extensions"]??"";
        $this->mime_type = $upload_config["mime_types"]??"";
        $this->max_size = $upload_config["max_size"]??"";
        $this->min_size = $upload_config["min_size"]??"";
        $this->message = $upload_config["message"]??"";
    }
    
    /**
     * @inheritdoc 验证规则
     */
    public function rules()
    {
        $file_rule = [["file"], "file"];
        if ($this->extensions) {
            $file_rule["extensions"] = $this->extensions;
        }
        if ($this->mime_type) {
            $file_rule["mimeTypes"] = $this->mime_type;
        }
        if ($this->max_size) {
            $file_rule["maxSize"] = $this->max_size;
        }
        if ($this->min_size) {
            $file_rule["minSize"] = $this->min_size;
        }
        if ($this->message) {
            $file_rule["message"] = $this->message;
        }
        $rules = [$file_rule];
        
        return $rules;
    }
}

配置文件 @app/config/params.php

 [
        "extensions" => ["jpg", "png", "jpeg", "jpe", "pdf"],
        "mime_types" => ["image/*", "application/pdf"],
        "max_size" => 10 * 1024 * 1024,
        "min_size" => 1,
        "message" => "上传失败",
    ]
];

使用步骤

  //实例化上传验证类,传入上传配置参数项名称
  $model = new UploadValidate("test_upload");
  //上传
  $result = CommonHelper::myUpload($model, $field, "test");

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22835.html

相关文章

  • RageFrame 一个 Yii2 + AdminLET 免费开源多商户通用后台管理系统

    摘要:极致的插件机制,系统内的系统,安装和卸载不会对原来的系统产生影响强大的功能完全满足各阶段的需求,支持用户多端访问后台微信前台等,系统中的系统。多入口模式,多入口分为后台前端,微信,对内接口,对外接口,不同的业务,不同的设备,进入不同的入口。 RageFrame 2.0 为二次开发而生,让开发变得更简单 项目地址:https://github.com/jianyan74/... 前言 这...

    sunny5541 评论0 收藏0
  • RageFrame 一个 Yii2 + AdminLET 免费开源多商户通用后台管理系统

    摘要:极致的插件机制,系统内的系统,安装和卸载不会对原来的系统产生影响强大的功能完全满足各阶段的需求,支持用户多端访问后台微信前台等,系统中的系统。多入口模式,多入口分为后台前端,微信,对内接口,对外接口,不同的业务,不同的设备,进入不同的入口。 RageFrame 2.0 为二次开发而生,让开发变得更简单 项目地址:https://github.com/jianyan74/... 前言 这...

    Ali_ 评论0 收藏0
  • Yii2 rules常用规则

    摘要:必须值验证属性字段名必填值提示信息说明的别名确保了特性不为空邮箱验证说明的别名确保了特性的值是一个有效的电邮地址正则验证字段名正则表达式提示信息字段名正则表达式提示信息正则取反说明的别名确保了特性匹配一个正则表达式网址说明的别名确保了特性是 required : 必须值验证属性 [[字段名],required,requiredValue=>必填值,message=>提示信息]; #说明...

    Darkgel 评论0 收藏0
  • Yii2系列教程六:集成编辑器

    摘要:而这些问题目前的最好解决方案就是集成一个编辑器,鉴于大家这里不是指程序员都是喜欢所见即所得,所以,这里我主要是演示怎么集成所见即所得的富文本编辑器。 原文来自: https://jellybool.com/post/programming-with-yii2-rich-text-input-with-redactor 首先,很惭愧的是,前几天都出去外面玩了,没有及时更新教程,...

    xiaochao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<