使用ThinkPHP框架开发中怎么有效保证多文件上传不重复呢

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随机数,就不会出现文件命名重复了!!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值