上一篇文章讲解“杂项-上传之文件上传”,本篇文章讲解“杂项-上传之上传规则+获取文件 hash 散列值”。
文章接上一篇文章学习。
4. 上传规则
默认情况下,会在上传目录下面生成以当前日期为子目录,以微秒时间的md5 编码 为文件名的文件。
我们可以指定上传文件的命名规则,使用rule方法即可。
系统默认提供了几种上传命名规则,包括:
默认使用的是date规则,在上传目录下生成当前日期为子目录,以微秒时间的md5编码为文件名的文件:
1)上传规则的基本使用
①在Index控制器中,新建ruleUpload方法
上传文件后,点击“提交按钮”,预览:
注意:
1. sha1规则自己测试即可。
2)使用自定义命名规则
如果需要使用自定义命名规则,可以在rule方法中传入函数或者方法。
①在Index控制器中,新建customUpload方法,在rule方法中传入PHP的函数
上传文件后,点击“提交按钮”,预览:
②将customUpload方法中,上传规则换成自定义的函数
③在应用公共文件application/common.php文件中,定义timeRule函数
预览:
3)保留原文件名称
上传文件时,以上都是将上传的文件名称进行重定义,如果要保留源文件名称,要使用move方法的其他参数。
①在Index控制器中,新建nameUpload方法,保留原文件名称
注意:
1. move方法的第二个参数为“”或false时,保留原文件名称。
访问nameUpload方法,并上传英文名文件,预览:
上传 带有中文的文件 ,预览:
带中文的文件可以上传成功,但是中文会乱码:
有时会文件上传成功,文件名称也不乱码,但会返回错误。
【解决办法】 解决文件带中文的乱码问题。
在上传文件类File.php文件中,move方法:
上传一个带中文的文件,预览:
预览的名称乱码,看一下上传的文件名:
上传的文件名不乱码,那么只需将输出时的文件名,进行转码即可:
修改nameUpload方法:
预览:
注意:
1. 上传文件,保留原文件名,将move方法的第二个参数设置为“”或false。
2. 上传带中文的文件时,要将上传文件类File.php文件中move方法中的文件名转码,如果需要立即输出文件名,需要将输出的文件名转码。
4)不覆盖同名文件
默认情况下,会覆盖服务器上传目录下的同名文件,如果不希望覆盖,可以设置move方法的第三个参数为false。
①修改Index控制器中,nameUpload方法的move方法的参数
访问nameUpload方法,上传一个文件:
再重新上传一遍:
注意:
1. 上传文件默认覆盖同名文件(不同类型的文件同名不算),设置不覆盖,将move方法的第三个参数设置为false。
5. 获取文件hash散列值
可以获取上传文件的哈希散列值。
1)在Index控制器中,新建hashUpload方法,获取上传文件的hash散列值
访问预览:
2)统一使用hash方法获取文件的散列值
修改Index控制器中hashUpload方法:
访问预览:
注意:
1. 上传成功后返回的仍然是一个File对象,除了File对象自身的方法外,并且可以使用SplFileObject的属性和方法,便于进行后续的文件处理。
ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员
关注卓象程序员,定期发布技术文章
下一篇讲解“杂项 – Session”
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~