「ThinkPHP5开发连载79」tp5连载杂项之上传-上传规则+hash散列值

2022-10-11 21:31:20 151 0
魁首哥

上一篇文章讲解“杂项-上传之文件上传”,本篇文章讲解“杂项-上传之上传规则+获取文件 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”

收藏
分享
海报
0 条评论
151
上一篇:39、php进程演示 下一篇:华育国际 春季 PHP面试题终章

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码