现在的位置: 首页 > 综合 > 正文

最新的文件上传模型,支持多文件上传

2011年06月21日 ⁄ 综合 ⁄ 共 5846字 ⁄ 字号 评论关闭
 

为 MayFish 重新封装的一个文件上传类,支持多个文件同时上传,设置允许的上传文件类型和文件大小。

单独使用实例:

include 'uploaded.model.php';   
$U = new
 UploadModel();   
$U->target = '/tmp/'
;   
$U->exts = 'jpg,gif'
;   
$U->maxSize = 1024*275//275KB   

$U->save();   
  
$files = $U->
getFiles();   
print_r($files);

在 MayFish 中的使用实例:

public function up()   
{   
    
$U = M('SYS', 'upload'
);   
    
$U->target = '/tmp/'
;   
    
$U->exts = 'jpg,gif'
;   
    
$U->maxSize = 1024*275//275KB   

    $U->save();   
  
    
header('Location:/?a=upload'
);   
}

HTML 代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">
  
<head>
  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  
<title>无标题文档</title>
  
</head>
  
  
<body>
  
<form action="/?a=up" method="post" enctype="multipart/form-data">
  
<!-- 以下两上file类型控制的name属性可以任意设置,系统会自己取出input 的名称 -->
  
<input name="files[]" type="file" size="30" />
  
<input name="files[]" type="file" size="30" />
  
<input type="submit" value="开始上传" />
  
</form>
  
</body>
  
</html>

想要了解 MayFish 框架,请到 http://sites.google.com/site/mayfishgo/Home 进行浏览

类的代码如下:

<?php
/*
*
 * author:yagas(卢韦华)
 * http://sites.google.com/site/mayfishgo/Home
 * 2009-08-13 01:19:24
 
*/
   
class
 UploadModel   
{  
    
protected $keys
;   
    
protected $err = array
();   
    
protected $target
;   
    
protected $exts
;   
    
protected $maxSize
;   
    
protected $randName
;   
    
protected $files = array
();   
       
    
/*
*  
     * 初始化变量  
     
*/
  
    
public function
 __construct()   
    {   
        
$this->exts = array('jpeg','jpg','gif','png','zip','rar'
);   
        
$this->maxSize = 1024*1024*2
;   
        
$this->target = dirname(__FILE__. '/upload/'
;   
        
$this->randName = true
;   
        
$this->keys = $this->
getKeys();   
    }   
       
    
/*
*  
     * 获取 file 的名称  
     
*/
  
    
protected function
 getKeys()   
    {   
        
$keys = array_keys($_FILES
);   
        
return $keys
;   
    }   
       
       
    
/*
*  
     * 设置不同类型的变量  
     
*/
  
    
public function __set($name, $value
)   
    {   
        
$property = array('target','exts','maxSize','randName'
);   
        
if(!in_array($name, $property)) return false
;   
  
        
switch(strval($name
))   
        {   
            
case 'target':
   
                
$this->$name = Configure::read('app_path'. $value
;   
                
break
;   
               
            
case 'exts':
   
                
$this->$name = explode(',', $value
);   
                
break
;   
               
            
case 'randName':
   
                
if($value === true || $value == 1
)   
                {   
                    
$this->$name = true
;   
                }   
                
else
 {   
                    
$this->$name = false
;   
                }   
                
break
;   
  
            
default:
   
                
$this->$name = $value
;   
        }   
    }   
  
       
    
/*
*  
     * 移动上传的文件到指定的目录  
     * @param $fileName 移动单个文件名称的时候,对上传的文件重新命名  
     
*/
  
    
public function save($fileName
)   
    {   
        
$this->err = array
();   
        
$this->files = array
();   
  
        
if(!file_exists($this->
target)) {   
            
mkdir($this->
target);   
            
chmod($this->target, 0777
);   
        }   
  
        
foreach($this->keys as $key
)   
        {   
               
            
if(is_array($_FILES[$key]['name'
]))   
            {   
                
$count = count($_FILES[$key]['name'
]);   
                
for($i=0$i<$count$i++
)   
                {   
                    
$keys = array_keys($_FILES[$key
]);   
                    
foreach($keys as $item
)   
                    {   
                        
$file[$item= $_FILES[$key][$item][$i
];   
                    }   
                    
$this->upload($file, $fileName
);   
                }   
                
return (count($this->err) > 0)? false:true
;    
            }   
            
else
 {   
                
return $this->upload($_FILE[$key], $fileName
);   
            }   
        }   
    }   
       
  
    
/** 内部处理上传文件的过程 */
  
    
protected function upload($file, $fileName
)   
    {   
        
if(!is_uploaded_file($file['tmp_name'])) return false
;   
        
if(!$this->checkExt($file)) return false
;   
        
if(!$this->checkSize($file)) return false
;   
           
        
if($this->
randName)   
        {   
            
$newFileName = $this->target . date('YmdHis', time()) . rand(0,9. '.' . $this->getExt($file['name'
]);   
        }   
        
elseif(emptyempty($fileName
))   
        {   
            
$newFileName = $this->target . '/' . $file['name'
];   
        }   
        
else
 {   
            
$newFileName = $this->target . '/' . $fileName
;   
        }   
  
        
$result = move_uploaded_file($file['tmp_name'], $newFileName
);   
        
if(!$result
)   
        {   
            
return false
;   
        }   
        
else
 {   
            
$this->files[] = str_replace($this->target, $newFileName
);   
            
return true
;   
        }   
           
    }   
       
  
    
/*
*  
     * 是否是可上传的文件类型  
     * @param $file  文件对象  
     
*/
  
    
public function checkExt($file
)   
    {   
        
if(!in_array($this->getExt($file['name']), $this->
exts))   
        {   
            
$this->err[] = $file['name'].':ext'
;   
            
return false
;   
        }   
        
else
 {   
            
return true
;   
        }   
    }   
  
  
    
/*
*  
     * 获取文件后缀名  
     
*/
  
    
public function getExt($fileName
)   
    {   
        
$pos = strrpos($fileName, '.')+1
;   
        
return substr($fileName, $pos
);   
    }   
       
  
    
/*
*  
     * 检查文件大小是否合法  
     
*/
  
    
public function checkSize($file
)   
    {   
        
if($size > $this->
maxSize)   
        {   
            
$this->err[] = $file['name'].':max'
;   
            
return false
;   
        }   
        
else
 {   
            
return true
;   
        }   
    }   
  
    
/*
*  
     * 取得已经上传的文件名称  
     
*/
  
    
public function
 getFiles()   
    {   
        
return $this->
files;   
    }   

抱歉!评论已关闭.