1.首先,像ThinkPHP官网的手册那样写下以下上传文件的代码:
Public function upload(){
import('ORG.Net.UploadFile');
$upload = new UploadFile();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->savePath = './Public/Uploads/';// 设置附件上传目录
if(!$upload->upload()) {// 上传错误提示错误信息
$this->error($upload->getErrorMsg());
}else{// 上传成功 获取上传文件信息
$info = $upload->getUploadFileInfo();
}
// 保存表单数据 包括附件数据
$User = M("User"); // 实例化User对象
$User->create(); // 创建数据对象
$User->photo = $info[0]['savename']; // 保存上传的照片根据需要自行组装
$User->add(); // 写入用户数据到数据库
$this->success('数据保存成功!');
}
2.接着,
仔细看看官方手册对上传属性(saveRule)的说明:
上传文件的保存规则,必须是一个无需任何参数的函数名,例如可以是time、 uniqid com_create_guid等,但必须能保证生成的文件名是唯一的,默认是uniqid。
由此可知:ThinkPHP框架里的
$upload->saveRule ='';//文件名称设置(无参数的函数)
文件保存时默认命名的方法是PHP的uniqid()函数,问题就迎刃而解了!
3.1 如果使用的是
ThinkPHP3.1版本,我们可以在框架公共文件目录Common的common.php里写一个函数,内容如下:
function getrand(){
$now = $_SERVER['REQUEST_TIME'];//当前系统时间,比time()多5秒
return uniqid($now);
}
这时候就可以使用
$upload->saveRule ='getrand';//文件名称设置(系统时间戳+ID)
多文件上传也能保存了!!
3.2 如果使用的是
ThinkPHP3.2版本,就不用写函数了,直接使用:
$now =$_SERVER['REQUEST_TIME'];
$upload->saveName =array('uniqid',$now);//上传文件的保存规则
这样:在文件上传是给它一个时间戳+uniqid随机数,就不会出现文件命名重复了!!