Thinkphp中实现文件上传及去除重复数据

1.首先第一步 我们应该在控制器中写关于文件上传的方法 我在这里是用的upload()来命名文件上传方法的,下面就是我写的代码:

Thinkphp中实现文件上传及去除重复数据_第1张图片

代码的开头是判断是否是GET方式提交的,如果是则显示页面并不执行后面的代码直接退出。ThinkPHP文件上传操作使用 Think\Upload 类,所以我们应先实例化上传类$upload,然后设置附件上传的大小($upload->maxSize),上传的类型($upload->exts,允许上传的文件后缀(留空为不限制),使用数组或者逗号分隔的字符串设置,默认为空),附件上传的根目录($upload->rootPath)和子目录($upload->savePath)。

设置好上传的参数后,就可以调用 Think\Upload 类的upload方法进行附件上传,如果失败,返回false,并且用getError方法获取错误提示信息;如果上传成功,就获取到生成文件的子目录和文件名,方便下面解析上传的文件。

2.在我们写好了上面的上传文件的方法后,我们该考虑上传文件的编码格式(因为上传文件类型是.csv,编码格式会有些不同),所以我们应该先检测上传文件的编码格式,然后再去进行下面的操作,我先在ThinkPHP下的Common/function.php里写了检测文件编码的函数,代码如下:

Thinkphp中实现文件上传及去除重复数据_第2张图片

然后在控制器中检测文件的编码格式,然后再去判断是不是我们所要的utf-8的编码格式,如果不是则让其转换成utf-8编码格式,代码如下:

Thinkphp中实现文件上传及去除重复数据_第3张图片

3.在上面转换编码格式后,我们开始解析csv文件,判断这个csv文件中是否存在跟数据库一样的数据,有重复我们就去掉重复数据。首先我们以只读的方式打开这个文件(fopen($file,'r')),我们用主键来判断是否有重复的,这里主键是no,所以我们先用getFie方法获取到原表中所有的no,把这些no数据存入到一个数组中,在用一个空数组存放没有重复的数据,用while循环实现每个数据进行对比,in_array函数判断是否在数组中,存在输出存在的学号,不存在则追加到新的数组中,实现的详细代码如下:

Thinkphp中实现文件上传及去除重复数据_第4张图片

4.文件下载

首先在ThinkPHP下的建好Downloads文件夹,存放日志文件,详细代码如下:

Thinkphp中实现文件上传及去除重复数据_第5张图片

这就是Thinkphp中实现文件上传及去除重复数据的所有操作,这其中还有好多的小瑕疵,希望有大佬路过提点意见。

你可能感兴趣的:(php)