关于上传的saveRule

浏览:4646 发布日期:2014/03/15 分类:用法示例 关键字: saveRule
关于在http://www.thinkphp.cn/info/194.html中看到的"上传文件的命名规范"不是很明白,是关于saveRule的用户自定义函数,所以自己尝试添加了一些代码,不对的地方,还请大家指出!!
这是我的上传图片的配置代码:

这是效果图:

1假如你的项目中使用上传文件的方法比较少的话,你可以不修改代码的,
直接设置上传文件名(参考来自:http://www.thinkphp.cn/info/194.html)$upload->saveRule = time().'_'.mt_rand();2.修改Upload.class.php文件,适合多处上传需要用到用户自定义函数
修改的文件是:Upload.class.php(Thinkphp的文件上传文件类)
我在class中添加了一个方法:
类中的$config数组中添加了一个元素:'userFunction'      =>  false      //用户是否使用自定义函数 这是自己添加的方法:/**
     * 存放用户自定义函数定义
     *@param null
     *@return Array(functionName,param)
     *Add on 2014-03-15 By funInCorner(xiaofosong@126.com)
     * **/
    private function __isfExists(){
        //返回的数组(函数名称,函数参数)
        $re_arr = array("functionName"=>"","param"=>"");
        $param2 = "";
        //将用户的传递的saveRule赋值给$functionName
        $functionName = $saveRule = $this->saveRule;
        //$this->userFunction是用来判断用户是否用用户自定义函数
        if(strpos($saveRule, "(" ) != false && $this->userFunction){
            //获取开始位置
            $startLeft = strpos($saveRule, "(" );
            //参数字符串 
            $param2 = substr($functionName,$startLeft + 1,strlen($functionName) - ($startLeft + 2) );   
            //函数名称
            $functionName = substr($functionName,0,strpos($saveRule, "(" ));
            $re_arr['functionName'] = $functionName;
            $re_arr['param'] = $param2;   
        }else{
            $re_arr['functionName'] = $this->saveRule;
        }

        /**
        *下面的方法需要手动加的
        *用户自定义函数的返回值务必是string
        *返回的string,将作为不带扩展名的文件名称(如:helloWorld)
        *范例配置:$upload->saveRule = 'datetime(10)';
        *或者是:$upload->saveRule = 'datetime()';
        **/
        if($param2){
            //当用户自定义的函数有参数时
            if(!function_exists($functionName)){
                //只是范例方法,可以删除
                function datetime($param2){
                    return $param2.date('YmdHis').rand(0,10);
                };
            }   
        }else{
            //当用户自定义的函数没有参数时
            if(!function_exists($functionName)){
                //只是范例方法,可以删除
                function datetime(){
                    return date('YmdHis').rand(0, 10);
                };
            }   
        }
        return $re_arr;
    }
修改了getSaveName方法 //修改之后的getSaveName函数
    private function getSaveName($filename) {
        $re_arr = $this->__isfexists();//调用一下检查函数
        $rule = $re_arr['functionName'];
        $parma = $re_arr['param']; 
        if(empty($rule)) {//没有定义命名规则,则保持文件名不变
            $saveName = $filename['name'];
        }else {
            if($parma != ""){
                 if(function_exists($rule)) {
                    //根据用户自定义的函数的string做文件名称
                    $saveName = $rule($parma);
                }
            }else{
                if(function_exists($rule) ){
                    //使用函数生成一个唯一文件标识号
                    $saveName = $rule();
                }else {
                    //使用给定的文件名作为标识号
                    $saveName = $rule;
                }
            }
            //最后保存名称和文件扩展名用"."连接
            $saveName .= ".".$filename['extension'];
        }
        if($this->autoSub) {
            // 使用子目录保存文件
            $filename['savename'] = $saveName;
            $saveName = $this->getSubName($filename).$saveName;
        }
        return $saveName;
    }

附件 UploadFile.class.zip ( 5.22 KB 下载:54 次 )

评论( 相关
后面还有条评论,点击查看>>