搜索
系统检测到您的用户名不符合规范:

【补充】ThinkPHP3.1多文件上传参数设置——自定义文件命名规则

浏览:3530 发布日期:2016年09月12日 分类:技术分享 关键字: 文件上传 saveRule 自定义 命名规则 多文件上传
今天要记录的是关于ThinkPHP3.1.3及其以前版本关于多文件上传的参数设置问题。关于文件上传,我们只讨论一个参数——那就是"saveRule",也就是上传后的文件命名规则。

先看截图,这张截图是来自于TP官方提供的手册(关键看截图中圈出来的地方)


从截图中可以看出,官方对此参数给出了3个参数值(一般情况下已经够用了),但若是非要自定义一个新的命名规则呢?那当然就得修改这个参数命名规则了——也就是写一个自定义函数,然后这里用自定义函数名代替(这里的自定义函数不能带参数)。

【注意】今天讨论的重点在于多文件上传,单文件上传的话基本上不用考虑这个命名的问题了。

下面在来看一张截图,假设这是我们的上传控件(也就是file表单,注意看截图中圈出来的地方)


接下来就是在上传的方法中设定上传参数了,重点在于设定"saveRule"的值。之前也看到过不少的文章有写道关于这个参数值的设定,但都不够详细(那些都是适合高手参考使用)。

假设我们要用我们自己的自定义函数来控制上传后的文件命名。
很简单,只需要做两步即可。不要眨眼。。。

【第一步】写一个自定义函数。操作流程如下:
A:新建一个php文件,文件名"common.php"(必须是这个名字,不能变哈)
B:这个文件放在哪里呢?当然是你开发的应用(若你开发的是管理后台,那你需要找的文件夹可能就是"Admin"了),然后再找到应用下的"Common"文件夹若文件件不存在,那就手动创建一个,注意严格区分大小写。然后把common.php放进去
C:在common.php里面写上你的自定义函数(函数的功能就是做各种处理,最终返回一个字符串,作为上传成功后的文件的名字)
D:到这里第一步就算完成了

第一步中的自定义函数,提供一个参考代码<?php
//多文件上传,文件命名调用自定义函数
function get_uuid(){
$charid = strtoupper(md5(uniqid(mt_rand(), true)));
$uuid = substr($charid, 0, 8).substr($charid, 8, 4).substr($charid,12, 4).substr($charid,16, 4).substr($charid,20,12);
return strtolower($uuid);
}
【第二步】在处理上传文件的方法里面设置"saveRule"。也就是在实例化"UploadFile"类后给这个类的"saveRule"属性赋值。

第二步的参考代码如下:
$upload->saveRule = 'get_uuid'; // 使用自定义函数给文件命名

//$upload->saveRule = 'uniqid'; // 文件自动命名
以上代码中的"get_uuid"可以修改的,只要和你定义的函数的名称保持一致就好,当然也不要故意去撞枪口哈。

以上内容就是今天要讨论的东西了,虽然很肤浅,但真的很实用,尤其是对于一些正在被这个问题所困扰的童鞋们。


【重点如下】
第一:自定义函数存放的位置,这个位置不要搞错了哦,当然也要注意文件以及文件夹的名字(建议不要随意改动,且要注意大小写)
第二:自定义函数不能有参数,返回值就是一个字符串(也就是上传成功后的文件名)


-----------------------
最终的效果图如下:
-----------------------


上传后的图片命名:


好了,到这里就要结束了。
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
tanmingjun
积分:937 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /