| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | namespace app\controller\api\file; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use app\controller\api\Base; | 
					
						
							|  |  |  | use app\model\File; | 
					
						
							|  |  |  | use app\model\System; | 
					
						
							|  |  |  | use app\service\Image; | 
					
						
							|  |  |  | use app\validate\Upload as VUpload; | 
					
						
							|  |  |  | use think\facade\Config; | 
					
						
							|  |  |  | use think\facade\Filesystem; | 
					
						
							|  |  |  | use think\facade\Lang; | 
					
						
							|  |  |  | use think\response\Json; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * 文件上传 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Class Upload | 
					
						
							|  |  |  |  * @package app\controller\api\file | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class Upload extends Base | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     protected $noNeedLogin = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 图片上传是否进行压缩[max-width:1920px]
 | 
					
						
							|  |  |  |     private bool $isCompress = true; | 
					
						
							|  |  |  |     private $validate = null; | 
					
						
							|  |  |  |     // 文件上传对外默认保存目录(相对路径)
 | 
					
						
							|  |  |  |     private string $uploadPath = ''; | 
					
						
							|  |  |  |     // 文件上传对外默认保存目录是否有写权限
 | 
					
						
							|  |  |  |     private bool $uploadPathIsWritable = false; | 
					
						
							|  |  |  |     protected bool $saveToOos = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function initialize() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         parent::initialize(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $system = System::getSystem(); | 
					
						
							|  |  |  |         if (!empty($system)) { | 
					
						
							|  |  |  |             $this->isCompress = $system['compress'] ?? true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $this->validate = new VUpload(); | 
					
						
							|  |  |  |         $this->uploadPath = Config::get('filesystem.disks.local.url'); | 
					
						
							| 
									
										
										
										
											2021-11-30 18:52:02 +08:00
										 |  |  |         $savePath = app()->getRootPath() . 'public' . $this->uploadPath; | 
					
						
							|  |  |  |         if (!is_dir($savePath)) { | 
					
						
							|  |  |  |             @mkdir($savePath, 0777); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if(is_writable($savePath)){ | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |             $this->uploadPathIsWritable = true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->cancelTimeLimit(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 通用文件上传 | 
					
						
							|  |  |  |      * @return Json | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function file() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $file = request()->file('file'); | 
					
						
							|  |  |  |         if (empty($file)) { | 
					
						
							|  |  |  |             return  $this->json(4001, '请上传的文件'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if($this->validate->checkFile($file)){ | 
					
						
							|  |  |  |             try{ | 
					
						
							|  |  |  |                 if(!$this->uploadPathIsWritable){ | 
					
						
							|  |  |  |                     throw new \Exception('上传文件夹需要写入权限'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $src = Filesystem::putFile(date('Ymd'), $file, 'uniqid'); | 
					
						
							|  |  |  |                 $src = $this->uploadPath . '/' . $src; | 
					
						
							|  |  |  |                 $return['src'] = $src; | 
					
						
							|  |  |  |                 $return['name'] = $file->getOriginalName(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             } catch (\Exception $e) { | 
					
						
							|  |  |  |                 return $this->json(4003, $e->getMessage()); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return $this->json(0,'success', $return); | 
					
						
							|  |  |  |         }else{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $errorMsg = Lang::get($this->validate->getError()); | 
					
						
							|  |  |  |             return $this->json(4002, $errorMsg); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 通用图片上传 | 
					
						
							|  |  |  |      * @return Json | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function image() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $image = request()->file('image'); | 
					
						
							|  |  |  |         if (empty($image)) { | 
					
						
							|  |  |  |             return  $this->json(4001, '请上传图片文件'); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-11-30 18:52:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |         if($this->validate->checkImage($image)){ | 
					
						
							|  |  |  |             try{ | 
					
						
							|  |  |  |                 if(!$this->uploadPathIsWritable){ | 
					
						
							|  |  |  |                     throw new \Exception('上传文件夹需要写入权限'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $src = Filesystem::putFile(date('Ymd'), $image, 'uniqid'); | 
					
						
							|  |  |  |                 $src = $this->uploadPath . '/' . $src; | 
					
						
							|  |  |  |                 $return['src'] = $src; | 
					
						
							|  |  |  |                 if($this->isCompress){ | 
					
						
							|  |  |  |                     Image::resize($src); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2021-11-30 18:52:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |             } catch (\Exception $e) { | 
					
						
							|  |  |  |                 return $this->json(4003, $e->getMessage()); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return $this->json(0, 'success', $return); | 
					
						
							|  |  |  |         }else{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $errorMsg = Lang::get($this->validate->getError()); | 
					
						
							|  |  |  |             return $this->json(4002, $errorMsg); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |