123 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
| <?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');
 | |
|         $savePath = app()->getRootPath() . 'public' . $this->uploadPath;
 | |
|         if (!is_dir($savePath)) {
 | |
|             @mkdir($savePath, 0777);
 | |
|         }
 | |
|         if(is_writable($savePath)){
 | |
|             $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, '请上传图片文件');
 | |
|         }
 | |
| 
 | |
|         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);
 | |
|                 }
 | |
| 
 | |
|             } 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);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| } |