dd

UploadFile类多缩略图存不同目录

jerry thinkphp 2015年11月18日 收藏
发现现在的系统自带的upload类可以创建多个缩略图,但是只能存于同一个文件夹下,我看了一下源文件代码,发现只要修改几个地方就可以实现存放不同文件夹下了。
private function save($file) {
        $filename = $file['savepath'].$file['savename'];
        if(!$this->uploadReplace && is_file($filename)) {
            // 不覆盖同名文件
            $this->error    =    '文件已经存在!'.$filename;
            return false;
        }
        // 如果是图像文件 检测文件格式
        if( in_array(strtolower($file['extension']),array('gif','jpg','jpeg','bmp','png','swf'))) {
            $info   = getimagesize($file['tmp_name']);
            if(false === $info || ('gif' == strtolower($file['extension']) && empty($info['bits']))){
                $this->error = '非法图像文件';
                return false;                
            }
        }
        if(!move_uploaded_file($file['tmp_name'], $this->autoCharset($filename,'utf-8','gbk'))) {
            $this->error = '文件上传保存错误!';
            return false;
        }
        if($this->thumb && in_array(strtolower($file['extension']),array('gif','jpg','jpeg','bmp','png'))) {
            $image =  getimagesize($filename);
            if(false !== $image) {
                //是图像文件生成缩略图
                $thumbWidth        =    explode(',',$this->thumbMaxWidth);
                $thumbHeight    =    explode(',',$this->thumbMaxHeight);
                $thumbPrefix    =    explode(',',$this->thumbPrefix);
                $thumbSuffix    =   explode(',',$this->thumbSuffix);
                $thumbFile        =    explode(',',$this->thumbFile);
                $thumbPath      =   $this->thumbPath?:dirname($filename).'/';  //我修改的地方
                $thumbExt       =   $this->thumbExt ? $this->thumbExt : $file['extension']; //自定义缩略图扩展名
                // 生成图像缩略图
                import($this->imageClassPath);
                for($i=0,$len=count($thumbWidth); $i<$len; $i++) {
                    if(!empty($thumbFile[$i])) {
                        $thumbname  =   $thumbFile[$i];
                    }else{
                        $prefix     =   isset($thumbPrefix[$i])?$thumbPrefix[$i]:$thumbPrefix[0];
                        $suffix     =   isset($thumbSuffix[$i])?$thumbSuffix[$i]:$thumbSuffix[0];
                        $thumbname  =   $prefix.basename($filename,'.'.$file['extension']).$suffix;
                    }
                    if(1 == $this->thumbType){
                        Image::thumb2($filename,$thumbPath.$thumbname.'.'.$thumbExt,'',$thumbWidth[$i],$thumbHeight[$i],true); //修改的地方
                    }else{
                        Image::thumb($filename,$thumbPath.$thumbname.'.'.$thumbExt,'',$thumbWidth[$i],$thumbHeight[$i],true); //修改的地方
                    }
                    
                }
                if($this->thumbRemoveOrigin) {
                    // 生成缩略图之后删除原图
                    unlink($filename);
                }
            }
        }
        if($this->zipImags) {
            // TODO 对图片压缩包在线解压

        }
        return true;
    }
如果改后会出现什么问题,还请告知~~

我后来发现改成数组参数更方便哈!
配置文件设置成这样:
$upload->thumbPath=array($targetFolder_s,$targetFolder_m,$targetFolder_b);
系统的源类文件只要修改:
if(1 == $this->thumbType){
                        Image::thumb2($filename,$thumbPath.$thumbname.'.'.$thumbExt,'',$thumbWidth[$i],$thumbHeight[$i],true);
                    }else{
                        Image::thumb($filename,$thumbPath.$thumbname.'.'.$thumbExt,'',$thumbWidth[$i],$thumbHeight[$i],true);
                    }
改成:$thumbPath后加个[$i]
if(1 == $this->thumbType){
                        Image::thumb2($filename,$thumbPath[$i].$thumbname.'.'.$thumbExt,'',$thumbWidth[$i],$thumbHeight[$i],true);
                    }else{
                        Image::thumb($filename,$thumbPath[$i].$thumbname.'.'.$thumbExt,'',$thumbWidth[$i],$thumbHeight[$i],true);
                    }
就可以了!
还有一个问题是,如果存放路径是动态获取的,比如按时间创建目录,则需要先创建目录,不然存放不了。
dd