144 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			144 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | |||
|  | namespace app\controller\manager; | |||
|  | 
 | |||
|  | use app\model\{File as MFile, Archives, Block, Category, Link, Slide, Log}; | |||
|  | use app\service\Tool; | |||
|  | 
 | |||
|  | class File extends Base | |||
|  | { | |||
|  |     protected $noNeedLogin = ['delPath', 'del', 'unuse', 'getAllFilesInUse', 'list', 'index']; | |||
|  |     //删除磁盘上的文件
 | |||
|  |     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); | |||
|  |         } | |||
|  |         $categoryFiles = Category::getFilesInUse(); | |||
|  |         if(!empty($categoryFiles)){ | |||
|  |             $files = array_merge($files, $categoryFiles); | |||
|  |         } | |||
|  |         $articleFiles = Archives::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(); | |||
|  |     } | |||
|  | } |