147 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			147 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						|||
| 
								 | 
							
								namespace app\controller\manager;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use app\model\{File as MFile, Article, Block, Category, Link, LinkProduct, Slide, Log};
							 | 
						|||
| 
								 | 
							
								use app\service\Tool;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								class File extends Base
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    //删除磁盘上的文件
							 | 
						|||
| 
								 | 
							
								    public function delPath()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        if ($this->request->isPost()) {
							 | 
						|||
| 
								 | 
							
								            $paths = input('post.paths/a');
							 | 
						|||
| 
								 | 
							
								            if(!empty($paths)){
							 | 
						|||
| 
								 | 
							
								                foreach($paths as $path){
							 | 
						|||
| 
								 | 
							
								                    Tool::delFile($path);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                Log::write('file', 'delPath', '批量删除了磁盘文件,涉及到的文件路径为:' . implode(',', $paths));
							 | 
						|||
| 
								 | 
							
								                return $this->json();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return $this->json(2, '待删除文件列表为空');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $this->json(1, '非法请求!');
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    //删除文件记录
							 | 
						|||
| 
								 | 
							
								    public function del()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        if ($this->request->isPost()) {
							 | 
						|||
| 
								 | 
							
								            $ids = input('post.ids/a');
							 | 
						|||
| 
								 | 
							
								            if(empty($ids) || !is_array($ids)) {
							 | 
						|||
| 
								 | 
							
								                return $this->json(2, '参数错误,请核对之后再操作!');
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            $items = MFile::getListByIds($ids);
							 | 
						|||
| 
								 | 
							
								            if(!empty($items)){
							 | 
						|||
| 
								 | 
							
								                $delIds = [];
							 | 
						|||
| 
								 | 
							
								                foreach($items as $item){
							 | 
						|||
| 
								 | 
							
								                    $delIds[] = $item['id'];
							 | 
						|||
| 
								 | 
							
								                    if($item['type'] == MFile::IMG){
							 | 
						|||
| 
								 | 
							
								                        Tool::delFile($item['src'], 1);
							 | 
						|||
| 
								 | 
							
								                    }else{
							 | 
						|||
| 
								 | 
							
								                        Tool::delFile($item['src']);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                MFile::destroy($delIds);
							 | 
						|||
| 
								 | 
							
								                Log::write('file', 'del', '批量删除了文件,涉及到的文件ID为:' . implode(',', $delIds));
							 | 
						|||
| 
								 | 
							
								                return $this->json();
							 | 
						|||
| 
								 | 
							
								            }else{
							 | 
						|||
| 
								 | 
							
								                return $this->json(3, '待删除文件列表为空');
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $this->json(1, '非法请求!');
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 未使用文件列表,
							 | 
						|||
| 
								 | 
							
								     * 1. 遍历数据库中使用的图片视频及文件路径
							 | 
						|||
| 
								 | 
							
								     * 2. 遍历上传目录中的文件
							 | 
						|||
| 
								 | 
							
								     * 3. 数据对比,找出存在目录中的文件&不在数据库中的文件
							 | 
						|||
| 
								 | 
							
								     * 4. 页面上显示查找出来的文件
							 | 
						|||
| 
								 | 
							
								    */
							 | 
						|||
| 
								 | 
							
								    public function unuse()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $filesInUse = $this->getAllFilesInUse();    //数据库中在使用的文件
							 | 
						|||
| 
								 | 
							
								        $rootPath = app()->getRootPath();
							 | 
						|||
| 
								 | 
							
								        $uploadPath = $rootPath . 'storage';
							 | 
						|||
| 
								 | 
							
								        $uploadedFiles = getAllFilesByPath($uploadPath, $rootPath); //磁盘上上传的文件
							 | 
						|||
| 
								 | 
							
								        $files = MFile::getAll();
							 | 
						|||
| 
								 | 
							
								        $dbUploadedFiles = [];  //数据库中上传的文件
							 | 
						|||
| 
								 | 
							
								        foreach($files as $file){
							 | 
						|||
| 
								 | 
							
								            $src = trim($file['src']);
							 | 
						|||
| 
								 | 
							
								            if(!empty($src)){
							 | 
						|||
| 
								 | 
							
								                $key = getKeyByPath($src);
							 | 
						|||
| 
								 | 
							
								                $dbUploadedFiles[$key] = $file;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        $uploadedNotInUseFiles = array_diff_key($uploadedFiles, $filesInUse);   //磁盘上上传未使用的文件
							 | 
						|||
| 
								 | 
							
								        $dbUploadedNotInUseFiles = array_diff_key($dbUploadedFiles, $filesInUse);    //数据库中上传未使用的文件
							 | 
						|||
| 
								 | 
							
								        $bothNotInUseFiles = array_intersect_key($uploadedNotInUseFiles, $dbUploadedNotInUseFiles);  //磁盘和数据库中,两边都未使用
							 | 
						|||
| 
								 | 
							
								        $this->data['uploadedNotInUseFiles'] = $uploadedNotInUseFiles;
							 | 
						|||
| 
								 | 
							
								        $this->data['dbUploadedNotInUseFiles'] = $dbUploadedNotInUseFiles;
							 | 
						|||
| 
								 | 
							
								        $this->data['bothNotInUseFilesKey'] = array_keys($bothNotInUseFiles);
							 | 
						|||
| 
								 | 
							
								        return $this->view();
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    //获取所有在使用的文件
							 | 
						|||
| 
								 | 
							
								    private function getAllFilesInUse()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $files = [];
							 | 
						|||
| 
								 | 
							
								        $blockFiles = Block::getFilesInUse();
							 | 
						|||
| 
								 | 
							
								        if(!empty($blockFiles)){
							 | 
						|||
| 
								 | 
							
								            $files = array_merge($files, $blockFiles);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $slideFiles = Slide::getFilesInUse();
							 | 
						|||
| 
								 | 
							
								        if(!empty($slideFiles)){
							 | 
						|||
| 
								 | 
							
								            $files = array_merge($files, $slideFiles);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $linkFiles = Link::getFilesInUse();
							 | 
						|||
| 
								 | 
							
								        if(!empty($linkFiles)){
							 | 
						|||
| 
								 | 
							
								            $files = array_merge($files, $linkFiles);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $linkProductFiles = LinkProduct::getFilesInUse();
							 | 
						|||
| 
								 | 
							
								        if(!empty($linkProductFiles)){
							 | 
						|||
| 
								 | 
							
								            $files = array_merge($files, $linkProductFiles);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $categoryFiles = Category::getFilesInUse();
							 | 
						|||
| 
								 | 
							
								        if(!empty($categoryFiles)){
							 | 
						|||
| 
								 | 
							
								            $files = array_merge($files, $categoryFiles);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $articleFiles = Article::getFilesInUse();
							 | 
						|||
| 
								 | 
							
								        if(!empty($articleFiles)){
							 | 
						|||
| 
								 | 
							
								            $files = array_merge($files, $articleFiles);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $files;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    //ajax获取文件列表
							 | 
						|||
| 
								 | 
							
								    public function list()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        if($this->request->isAjax()){
							 | 
						|||
| 
								 | 
							
								            $page = input('param.page/d', 1);
							 | 
						|||
| 
								 | 
							
								            $size = input('param.size/d', 20);
							 | 
						|||
| 
								 | 
							
								            if(!is_integer($page) || $page < 1){
							 | 
						|||
| 
								 | 
							
								                $page = 1;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            if (!is_integer($size) || $size < 1) {
							 | 
						|||
| 
								 | 
							
								                $size = 20;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            $type = input('param.type', '');
							 | 
						|||
| 
								 | 
							
								            if(!in_array($type, array_keys(MFile::getTypes()))){
							 | 
						|||
| 
								 | 
							
								                $type = '';
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            $items = MFile::getList($type, $page, $size);
							 | 
						|||
| 
								 | 
							
								            return $this->json(0, 'ok', $items);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $this->json(1, '无此操作');
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    //列表
							 | 
						|||
| 
								 | 
							
								    public function index()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $items = MFile::getListPage();
							 | 
						|||
| 
								 | 
							
								        $this->data['items'] = $items;
							 | 
						|||
| 
								 | 
							
								        $this->data['types'] = MFile::getTypes();
							 | 
						|||
| 
								 | 
							
								        return $this->view();
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |