139 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | ||
| namespace app\controller\manager;
 | ||
| 
 | ||
| use app\service\Image;
 | ||
| use app\model\{System, File};
 | ||
| use app\validate\Upload as VUpload;
 | ||
| use think\facade\{Filesystem, Config, Lang};
 | ||
| use think\Image as TImage;
 | ||
| use app\controller\BaseController;
 | ||
| 
 | ||
| class Upload extends BaseController
 | ||
| {
 | ||
|     private $isCompress = true;
 | ||
|     private $validate;
 | ||
|     private $uploadPath;
 | ||
|     private $uploadPathIsWritable = 0;
 | ||
| 
 | ||
|     public function __construct()
 | ||
|     {
 | ||
|         $system = System::getSystem();
 | ||
|         if (!empty($system)) {
 | ||
|             $this->isCompress = $system['compress']??true;
 | ||
|         }
 | ||
|         $this->validate = new VUpload();
 | ||
|         $this->uploadPath = Config::get('filesystem.disks.local.url');
 | ||
|         if(is_writable(app()->getRootPath() . 'public' . $this->uploadPath)){
 | ||
|             $this->uploadPathIsWritable = 1;
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     //视频上传
 | ||
|     public function video()
 | ||
|     {
 | ||
|         if(!$this->uploadPathIsWritable){
 | ||
|             return $this->json(1, '上传文件夹需要写入权限');
 | ||
|         }
 | ||
|         $video = request()->file('video');
 | ||
|         if($this->validate->checkVideo($video)){
 | ||
|             $src = Filesystem::disk('video')->putFile(date('Ymd'), $video, 'uniqid');
 | ||
|             $src = $this->uploadPath . '/' . $src;
 | ||
|             $return['src'] = $src;
 | ||
|             File::add($video, $src, 'video');    //加入上传文件表
 | ||
|             return $this->json(0, 'ok', $return);
 | ||
|         }else{
 | ||
|             $errorMsg = Lang::get($this->validate->getError());
 | ||
|             return $this->json(1, $errorMsg);
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     //文件上传(通用)
 | ||
|     public function file()
 | ||
|     {
 | ||
|         $file = request()->file('file');
 | ||
|         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();
 | ||
|                 File::add($file, $src, 'file');    //加入上传文件表
 | ||
|             } catch (\Exception $e) {
 | ||
|                 return $this->json(1, $e->getMessage());
 | ||
|             }
 | ||
|             return $this->json(0,'ok',$return);
 | ||
|         }else{
 | ||
|             $errorMsg = Lang::get($this->validate->getError());
 | ||
|             return $this->json(1, $errorMsg);
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     //图片上传(通用)
 | ||
|     public function image()
 | ||
|     {
 | ||
|         $image = request()->file('image');
 | ||
|         if($this->validate->checkImage($image)){
 | ||
|             try{
 | ||
|                 if(!$this->uploadPathIsWritable){
 | ||
|                     throw new \Exception('上传文件夹需要写入权限');
 | ||
|                 }
 | ||
|                 $src = Filesystem::putFile(date('Ymd'), $image, 'uniqid');
 | ||
|                 $src = $this->uploadPath . '/' . $src;
 | ||
|                 $suffix = strtolower($image->getOriginalExtension());
 | ||
|                 if($suffix == 'gif'){
 | ||
|                     $return['thumb_src'] = $src;    //TODO获取GIF缩略图
 | ||
|                 }else{
 | ||
|                     $return['thumb_src'] = Image::getThumb($src, 100, 100, TImage::THUMB_SCALING);   //上传返回缩略图宽度为100
 | ||
|                 }
 | ||
|                 $return['src'] = $src;
 | ||
|                 if($this->isCompress){
 | ||
|                     Image::resize($src);
 | ||
|                 }
 | ||
|                 File::add($image, $src);    //加入上传文件表
 | ||
|             } catch (\Exception $e) {
 | ||
|                 return $this->json(1, $e->getMessage());
 | ||
|             }
 | ||
|             return $this->json(0, 'ok', $return);
 | ||
|         }else{
 | ||
|             $errorMsg = Lang::get($this->validate->getError());
 | ||
|             return $this->json(1, $errorMsg);
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     //富文本编辑器商城图片
 | ||
|     public function wangImage()
 | ||
|     {
 | ||
|         
 | ||
|         $imageArr = request()->file('wang_img'); // 该方式,前端js上传方法中字段名称必须以数组形式传参 如 wang_img[] = 值
 | ||
|         $errno = 0;
 | ||
|         $data = [];
 | ||
|         if(!$this->uploadPathIsWritable){
 | ||
|             $errno = 1;
 | ||
|             $data[] = '上传文件夹需要写入权限';
 | ||
|         }else{
 | ||
|             foreach ($imageArr as $image) {
 | ||
|                 if($this->validate->checkImage($image)){
 | ||
|                     $src = Filesystem::putFile(date('Ymd'), $image, 'uniqid');
 | ||
|                     $src = $this->uploadPath . '/' . $src;
 | ||
|                     $data[] = $src;
 | ||
|                     if($this->isCompress){
 | ||
|                         Image::resize($src);
 | ||
|                     }
 | ||
|                     File::add($image, $src);    //加入上传文件表
 | ||
|                 }else{
 | ||
|                     $errno = 1;
 | ||
|                     $data = [];
 | ||
|                     $data[] = Lang::get($this->validate->getError());
 | ||
|                     break;
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|         
 | ||
|         $return['errno'] = $errno;
 | ||
|         $return['data'] = $data;
 | ||
|         return json($return);
 | ||
|     }
 | ||
| } |