正在显示
21 个修改的文件
包含
342 行增加
和
138 行删除
| @@ -68,7 +68,7 @@ zFePUMXy1bFghAfzNKlrc5XgH4ixeeMh3cDtU97K | @@ -68,7 +68,7 @@ zFePUMXy1bFghAfzNKlrc5XgH4ixeeMh3cDtU97K | ||
| 68 | public function deleted_profiles($data){ | 68 | public function deleted_profiles($data){ |
| 69 | $param = [ | 69 | $param = [ |
| 70 | 'title'=>$data['title'], | 70 | 'title'=>$data['title'], |
| 71 | - 'profileKey'=>$this->profile_key, | 71 | +// 'profileKey'=>$this->profile_key, |
| 72 | ]; | 72 | ]; |
| 73 | $url = $this->path.'/api/profiles/profile'; | 73 | $url = $this->path.'/api/profiles/profile'; |
| 74 | return $this->http_click('delete',$url,$param); | 74 | return $this->http_click('delete',$url,$param); |
| @@ -126,15 +126,13 @@ zFePUMXy1bFghAfzNKlrc5XgH4ixeeMh3cDtU97K | @@ -126,15 +126,13 @@ zFePUMXy1bFghAfzNKlrc5XgH4ixeeMh3cDtU97K | ||
| 126 | * @time :2023/5/8 9:47 | 126 | * @time :2023/5/8 9:47 |
| 127 | * https://app.ayrshare.com/api/media/upload | 127 | * https://app.ayrshare.com/api/media/upload |
| 128 | */ | 128 | */ |
| 129 | - public function post_media_upload($data){ | 129 | + public function post_media_upload($data,$api_key){ |
| 130 | $param = [ | 130 | $param = [ |
| 131 | 'file'=>$data['file'],//base64编码 | 131 | 'file'=>$data['file'],//base64编码 |
| 132 | - 'fileName'=>$data['file_name'],//生成图片名称 | ||
| 133 | - 'description'=>$data['description'],//描述 | ||
| 134 | ]; | 132 | ]; |
| 135 | - $this->headers['Authorization'] = $this->headers['Authorization'].$data['profile_key']; | 133 | + $this->headers['Authorization'] = $this->headers['Authorization'].$api_key; |
| 136 | $url = $this->path.'/api/media/upload'; | 134 | $url = $this->path.'/api/media/upload'; |
| 137 | - return $this->http_click('posts',$url,$param,$this->headers); | 135 | + return $this->http_click('post',$url,$param,$this->headers); |
| 138 | } | 136 | } |
| 139 | 137 | ||
| 140 | /** | 138 | /** |
| @@ -5,21 +5,44 @@ namespace App\Http\Controllers\Bside\AyrShare; | @@ -5,21 +5,44 @@ namespace App\Http\Controllers\Bside\AyrShare; | ||
| 5 | use App\Enums\Common\Code; | 5 | use App\Enums\Common\Code; |
| 6 | use App\Helper\AyrShare as AyrShareHelper; | 6 | use App\Helper\AyrShare as AyrShareHelper; |
| 7 | use App\Http\Controllers\Bside\BaseController; | 7 | use App\Http\Controllers\Bside\BaseController; |
| 8 | +use App\Http\Controllers\Bside\FileController; | ||
| 9 | +use App\Http\Controllers\file\ImageController; | ||
| 8 | use App\Http\Logic\Bside\AyrShare\AyrReleaseLogic; | 10 | use App\Http\Logic\Bside\AyrShare\AyrReleaseLogic; |
| 9 | use App\Http\Logic\Bside\AyrShare\AyrShareLogic; | 11 | use App\Http\Logic\Bside\AyrShare\AyrShareLogic; |
| 12 | +use App\Models\File\Image; | ||
| 13 | +use App\Models\File\Image as ImageModel; | ||
| 10 | 14 | ||
| 11 | /** | 15 | /** |
| 12 | * @name:社交发布 | 16 | * @name:社交发布 |
| 17 | + * Facebook Pages and Groups: 10 images, including a carousel post. | ||
| 18 | + * Instagram: 10 images. | ||
| 19 | + * Google : 1 image. | ||
| 20 | + * LinkedIn: 9 images. | ||
| 21 | + * Pinterest: 1 image. | ||
| 22 | + * Reddit: 1 image. | ||
| 23 | + * Telegram: 1 image. | ||
| 24 | + * Twitter:4 image | ||
| 13 | */ | 25 | */ |
| 14 | class AyrReleaseController extends BaseController | 26 | class AyrReleaseController extends BaseController |
| 15 | { | 27 | { |
| 16 | /** | 28 | /** |
| 29 | + * @name :(获取发送数据详情)info | ||
| 30 | + * @author :lyh | ||
| 31 | + * @method :post | ||
| 32 | + * @time :2023/5/10 14:57 | ||
| 33 | + */ | ||
| 34 | + public function info(AyrReleaseLogic $ayrReleaseLogic){ | ||
| 35 | + $info = $ayrReleaseLogic->release_info(); | ||
| 36 | + $this->response('success',Code::SUCCESS,$info); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + /** | ||
| 17 | * @name :(获取当前用户已绑定的社交链接)info | 40 | * @name :(获取当前用户已绑定的社交链接)info |
| 18 | * @author :lyh | 41 | * @author :lyh |
| 19 | * @method :post | 42 | * @method :post |
| 20 | * @time :2023/5/9 16:00 | 43 | * @time :2023/5/9 16:00 |
| 21 | */ | 44 | */ |
| 22 | - public function info(AyrShareLogic $ayrShareLogic){ | 45 | + public function share_info(AyrShareLogic $ayrShareLogic){ |
| 23 | $info = $ayrShareLogic->ayr_share_info(); | 46 | $info = $ayrShareLogic->ayr_share_info(); |
| 24 | $this->response('success',Code::SUCCESS,$info); | 47 | $this->response('success',Code::SUCCESS,$info); |
| 25 | } | 48 | } |
| @@ -29,80 +52,74 @@ class AyrReleaseController extends BaseController | @@ -29,80 +52,74 @@ class AyrReleaseController extends BaseController | ||
| 29 | * @method :post | 52 | * @method :post |
| 30 | * @time :2023/5/9 9:36 | 53 | * @time :2023/5/9 9:36 |
| 31 | */ | 54 | */ |
| 32 | - public function send_post(AyrReleaseLogic $ayrReleaseLogic,AyrShareLogic $ayrShareLogic){ | ||
| 33 | -// DB::beginTransaction(); | ||
| 34 | -// try { | 55 | + public function send_post(AyrReleaseLogic $ayrReleaseLogic,AyrShareLogic $ayrShareLogic,AyrShareHelper $ayrShare){ |
| 56 | + //获取发送账号详情 | ||
| 57 | + $share_info = $ayrShareLogic->ayr_share_info(); | ||
| 58 | + $data = [ | ||
| 59 | + 'images'=>$this->param['images'], | ||
| 60 | + 'files'=>$this->param['video'], | ||
| 61 | + ]; | ||
| 62 | + //参数处理 | ||
| 63 | + $this->param['mediaUrls'] = $ayrReleaseLogic->image_file_param($data);; | ||
| 64 | + //统一生成发布 | ||
| 65 | + $param = [ | ||
| 66 | + 'post'=>$this->param['content'], | ||
| 67 | + 'platforms'=>$this->param['platforms'], | ||
| 68 | + 'mediaUrls'=>$this->param['mediaUrls'],//参数处理 | ||
| 69 | + 'idempotencyKey'=>$this->param['idempotency_key'],//时间(如是过去时间,立即发布) | ||
| 70 | + ]; | ||
| 71 | + //发送请求发布社交文章 | ||
| 72 | + $res = $ayrShare->post_send_msg($param,$share_info['profile_key']); | ||
| 73 | + //保存数据库 | ||
| 74 | + $ayrReleaseLogic->release_add(); | ||
| 75 | + $this->response('success',Code::SUCCESS,$res); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * @name :(图片上传到第三方平台)send_media | ||
| 80 | + * @author :lyh | ||
| 81 | + * @method :post | ||
| 82 | + * @time :2023/5/10 14:07 | ||
| 83 | + */ | ||
| 84 | + public function send_media(AyrShareLogic $ayrShareLogic,AyrShareHelper $ayrShare){ | ||
| 85 | + $image_info = $ayrShareLogic->save_img_info($this->param['hash']); | ||
| 86 | + if(empty($image_info['ayr_id'])){ | ||
| 35 | //获取发送账号详情 | 87 | //获取发送账号详情 |
| 36 | $share_info = $ayrShareLogic->ayr_share_info(); | 88 | $share_info = $ayrShareLogic->ayr_share_info(); |
| 37 | - $data = [ | ||
| 38 | - 'images'=>$this->param['image'], | ||
| 39 | - 'files'=>$this->param['file'], | ||
| 40 | - ]; | ||
| 41 | - //参数处理 | ||
| 42 | - $image_data = $this->image_file_param($data); | ||
| 43 | - $this->param['mediaUrls'] = array_merge($image_data['images_link'],$image_data['files_link']); | ||
| 44 | - var_dump($this->param); | ||
| 45 | - die(); | ||
| 46 | - //统一生成链接 | 89 | + //获取当前图片数据是否已上传到第三方 |
| 90 | + $arr = (new ImageController())->index($this->param['hash']); | ||
| 91 | + //向第三方存储图片 | ||
| 47 | $param = [ | 92 | $param = [ |
| 48 | - 'post'=>$this->param['content'], | ||
| 49 | - 'platforms'=>$this->param['platforms'], | ||
| 50 | - 'mediaUrls'=>$this->param['mediaUrls'],//参数处理 | 93 | + 'file'=>($arr->original),//base64编码 |
| 51 | ]; | 94 | ]; |
| 52 | - //发送请求注册社交用户 | ||
| 53 | - $ayrShareHelper = new AyrShareHelper(); | ||
| 54 | - $res = $ayrShareHelper->post_send_msg($param,$share_info['profile_key']); | ||
| 55 | - $this->response('success',Code::SUCCESS,$res); | ||
| 56 | - //保存数据库 | ||
| 57 | - $ayrReleaseLogic->release_add(); | ||
| 58 | -// DB::commit(); | ||
| 59 | -// }catch (\Exception $e){ | ||
| 60 | -// DB::rollBack(); | ||
| 61 | -// $this->response('error',Code::USER_ERROR); | ||
| 62 | -// } | 95 | + $param_data = $ayrShare->post_media_upload($param,$share_info['profile_key']); |
| 96 | + //更新图片库 | ||
| 97 | + $ayrShareLogic->save_img($param_data); | ||
| 98 | + } | ||
| 99 | + $this->response('success'); | ||
| 63 | } | 100 | } |
| 64 | 101 | ||
| 65 | /** | 102 | /** |
| 66 | - * @name :(上传第三方参数参数)get_param | 103 | + * @name :(文件上传到第三方平台)send_media |
| 67 | * @author :lyh | 104 | * @author :lyh |
| 68 | * @method :post | 105 | * @method :post |
| 69 | - * @time :2023/5/10 10:27 | 106 | + * @time :2023/5/10 14:07 |
| 70 | */ | 107 | */ |
| 71 | - public function image_file_param($data) { | ||
| 72 | - if (empty($data) || !is_array($data)) { | ||
| 73 | - return empty($data) ? is_array($data) ? [] : '' : $data; | ||
| 74 | - } | ||
| 75 | - foreach ($data as $k => $v) { | ||
| 76 | - if (is_array($v)) { | ||
| 77 | - $data[$k] = $this->_extents($v); | ||
| 78 | - } else { | ||
| 79 | - if (is_null($v)) { | ||
| 80 | - $data[$k] = ''; | ||
| 81 | - continue; | ||
| 82 | - } | ||
| 83 | - //获取操作人 | ||
| 84 | - switch ((string) $k) { | ||
| 85 | - case 'image': | ||
| 86 | - $data['image_link'] = url('/b/image/' . $v . '/2'); | ||
| 87 | - break; | ||
| 88 | - case 'images': | ||
| 89 | - $v = explode(',',$v); | ||
| 90 | - foreach ($v as $k1=>$v1){ | ||
| 91 | - $data['images_link'][$k1] = url('/b/image/' . $v1 . '/2'); | ||
| 92 | - } | ||
| 93 | - break; | ||
| 94 | - case 'file': | ||
| 95 | - $data['file_link'] = url('/b/file_hash/' . $v .'/mp4'); | ||
| 96 | - break; | ||
| 97 | - case 'files': | ||
| 98 | - $v = explode(',',$v); | ||
| 99 | - foreach ($v as $k1=>$v1){ | ||
| 100 | - $data['files_link'][$k1] = url('/b/file_hash/' . $v1 . '/mp4'); | ||
| 101 | - } | ||
| 102 | - break; | ||
| 103 | - } | ||
| 104 | - } | 108 | + public function send_media_file(AyrShareLogic $ayrShareLogic,AyrShareHelper $ayrShare){ |
| 109 | + $image_info = $ayrShareLogic->save_file_info($this->param['hash']); | ||
| 110 | + if(empty($image_info['ayr_id'])){ | ||
| 111 | + //获取发送账号详情 | ||
| 112 | + $share_info = $ayrShareLogic->ayr_share_info(); | ||
| 113 | + //获取当前图片数据是否已上传到第三方 | ||
| 114 | + $arr = (new FileController())->index($this->param['hash']); | ||
| 115 | + //向第三方存储图片 | ||
| 116 | + $param = [ | ||
| 117 | + 'file'=>($arr->original),//base64编码 | ||
| 118 | + ]; | ||
| 119 | + $param_data = $ayrShare->post_media_upload($param,$share_info['profile_key']); | ||
| 120 | + //更新图片库 | ||
| 121 | + $ayrShareLogic->save_file($param_data); | ||
| 105 | } | 122 | } |
| 106 | - return $data; | 123 | + $this->response('success'); |
| 107 | } | 124 | } |
| 108 | } | 125 | } |
| @@ -13,6 +13,8 @@ use App\Models\AyrShare\AyrShare as AyrShareModel; | @@ -13,6 +13,8 @@ use App\Models\AyrShare\AyrShare as AyrShareModel; | ||
| 13 | */ | 13 | */ |
| 14 | class AyrShareController extends BaseController | 14 | class AyrShareController extends BaseController |
| 15 | { | 15 | { |
| 16 | + //生成名称前缀 | ||
| 17 | + const TITLE = 'global_so_'; | ||
| 16 | /** | 18 | /** |
| 17 | * @name :(社交列表)lists | 19 | * @name :(社交列表)lists |
| 18 | * @author :lyh | 20 | * @author :lyh |
| @@ -20,7 +22,10 @@ class AyrShareController extends BaseController | @@ -20,7 +22,10 @@ class AyrShareController extends BaseController | ||
| 20 | * @time :2023/5/5 16:06 | 22 | * @time :2023/5/5 16:06 |
| 21 | */ | 23 | */ |
| 22 | public function lists(AyrShareModel $ayrShareModel){ | 24 | public function lists(AyrShareModel $ayrShareModel){ |
| 23 | - $lists = $ayrShareModel->lists($this->map,$this->page,$this->row,'id',['*']); | 25 | + //授权配置列表 |
| 26 | + $share_list = $ayrShareModel->platforms; | ||
| 27 | + $lists = $ayrShareModel->lists($this->map,$this->page,$this->row,'id',['id','name','bind_plat_from','operator_id','created_at','updated_at']); | ||
| 28 | + $lists['share_list'] = $share_list; | ||
| 24 | $this->response('列表',Code::SUCCESS,$lists); | 29 | $this->response('列表',Code::SUCCESS,$lists); |
| 25 | } | 30 | } |
| 26 | 31 | ||
| @@ -36,9 +41,13 @@ class AyrShareController extends BaseController | @@ -36,9 +41,13 @@ class AyrShareController extends BaseController | ||
| 36 | $share_info = $ayrShareHelper->get_profiles_users($info['profile_key']); | 41 | $share_info = $ayrShareHelper->get_profiles_users($info['profile_key']); |
| 37 | if(isset($share_info['activeSocialAccounts'])){ | 42 | if(isset($share_info['activeSocialAccounts'])){ |
| 38 | $str = json_encode($share_info['activeSocialAccounts']); | 43 | $str = json_encode($share_info['activeSocialAccounts']); |
| 39 | - $ayrShareLogic->ayr_share_edit(['bind_plat_from'=>$str]); | 44 | + if($str != $info['bind_plat_from']){ |
| 45 | + $res = $ayrShareLogic->ayr_share_edit(['bind_plat_from'=>$str]); | ||
| 46 | + }else{ | ||
| 47 | + $res = false; | ||
| 48 | + } | ||
| 40 | } | 49 | } |
| 41 | - $this->response('success'); | 50 | + $this->response('success',Code::SUCCESS,['is_true'=>$res]); |
| 42 | } | 51 | } |
| 43 | /** | 52 | /** |
| 44 | * @name :(创建ayr_share账户)create_account | 53 | * @name :(创建ayr_share账户)create_account |
| @@ -48,7 +57,7 @@ class AyrShareController extends BaseController | @@ -48,7 +57,7 @@ class AyrShareController extends BaseController | ||
| 48 | */ | 57 | */ |
| 49 | public function create_account(AyrShareLogic $ayrShareLogic){ | 58 | public function create_account(AyrShareLogic $ayrShareLogic){ |
| 50 | $param = [ | 59 | $param = [ |
| 51 | - 'title'=>md5(uniqid().time()), | 60 | + 'title'=>self::TITLE.$this->user['project_id'].':'.$this->param['name'], |
| 52 | ]; | 61 | ]; |
| 53 | //发送请求注册社交用户 | 62 | //发送请求注册社交用户 |
| 54 | $ayrShareHelper = new AyrShareHelper(); | 63 | $ayrShareHelper = new AyrShareHelper(); |
| @@ -33,7 +33,7 @@ class FileController | @@ -33,7 +33,7 @@ class FileController | ||
| 33 | { | 33 | { |
| 34 | $this->request = request(); | 34 | $this->request = request(); |
| 35 | $this->config = config('filesystems.disks.upload'); | 35 | $this->config = config('filesystems.disks.upload'); |
| 36 | - $this->uploads = config('uploads.default_file'); | 36 | + $this->uploads = config('upload.default_file'); |
| 37 | $this->path = $this->config['root'].$this->uploads['path'].'/'; | 37 | $this->path = $this->config['root'].$this->uploads['path'].'/'; |
| 38 | } | 38 | } |
| 39 | 39 | ||
| @@ -44,13 +44,15 @@ class FileController | @@ -44,13 +44,15 @@ class FileController | ||
| 44 | * @method :post | 44 | * @method :post |
| 45 | * @time :2023/5/9 9:15 | 45 | * @time :2023/5/9 9:15 |
| 46 | */ | 46 | */ |
| 47 | - public function index($hash = '',$type = 1){ | 47 | + public function index($hash = '', $type = 1) |
| 48 | + { | ||
| 49 | + // 检查是否有修改日期或ETag头部 | ||
| 48 | if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) { | 50 | if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) { |
| 49 | header("HTTP/1.1 304 Not Modified"); | 51 | header("HTTP/1.1 304 Not Modified"); |
| 50 | exit; | 52 | exit; |
| 51 | } | 53 | } |
| 52 | $file_model = new File(); | 54 | $file_model = new File(); |
| 53 | - $info = $file_model->read(['hash'=>$hash]); | 55 | + $info = $file_model->read(['hash' => $hash]); |
| 54 | if ($info === false) { | 56 | if ($info === false) { |
| 55 | $this->response('指定文件不存在!', Code::USER_ERROR); | 57 | $this->response('指定文件不存在!', Code::USER_ERROR); |
| 56 | } | 58 | } |
| @@ -58,10 +60,54 @@ class FileController | @@ -58,10 +60,54 @@ class FileController | ||
| 58 | if (!is_file($path)) { | 60 | if (!is_file($path)) { |
| 59 | $this->response('指定文件已被系统删除!', Code::USER_ERROR); | 61 | $this->response('指定文件已被系统删除!', Code::USER_ERROR); |
| 60 | } | 62 | } |
| 63 | + $size = $info['size']; | ||
| 64 | + // 设置Content-Type头部 | ||
| 65 | + $header['Content-Type'] = 'video/' . $info['type']; | ||
| 66 | + // 设置Accept-Ranges头部 | ||
| 67 | + $header['Accept-Ranges'] = 'bytes'; | ||
| 68 | + // 检查是否有范围请求 | ||
| 69 | + if (isset($_SERVER['HTTP_RANGE'])) { | ||
| 70 | + $range = $_SERVER['HTTP_RANGE']; | ||
| 71 | + $ranges = explode('-', substr($range, 6)); | ||
| 72 | + $start = intval($ranges[0]); | ||
| 73 | + $end = $size - 1; | ||
| 74 | + if (!empty($ranges[1])) { | ||
| 75 | + $end = intval($ranges[1]); | ||
| 76 | + } | ||
| 77 | + $length = $end - $start + 1; | ||
| 78 | + // 设置部分响应头部 | ||
| 79 | + $header['Content-Length'] = $length; | ||
| 80 | + $header['Content-Range'] = 'bytes ' . $start . '-' . $end . '/' . $size; | ||
| 81 | + // 发送206 Partial Content状态码 | ||
| 82 | + header('HTTP/1.1 206 Partial Content'); | ||
| 83 | + header('Status: 206 Partial Content'); | ||
| 84 | + header('Accept-Ranges: bytes'); | ||
| 85 | + header('Content-Range: bytes ' . $start . '-' . $end . '/' . $size); | ||
| 86 | + | ||
| 87 | + // 读取部分内容并发送响应 | ||
| 88 | + $file = fopen($path, 'rb'); | ||
| 89 | + fseek($file, $start); | ||
| 90 | + $buffer = 1024 * 8; // 设置缓冲区大小 | ||
| 91 | + while (!feof($file) && ($p = ftell($file)) <= $end) { | ||
| 92 | + if ($p + $buffer > $end) { | ||
| 93 | + // 最后一块缓冲区 | ||
| 94 | + $buffer = $end - $p + 1; | ||
| 95 | + } | ||
| 96 | + echo fread($file, $buffer); | ||
| 97 | + flush(); // 将输出刷新到浏览器 | ||
| 98 | + } | ||
| 99 | + fclose($file); | ||
| 100 | + exit; | ||
| 101 | + } | ||
| 102 | + // 无范围请求,发送完整文件 | ||
| 103 | + $header['Content-Length'] = $size; | ||
| 61 | $content = file_get_contents($path); | 104 | $content = file_get_contents($path); |
| 62 | - $header['Content-Length'] = $info['size']; | ||
| 63 | - $header['Content-Type'] = 'video/'.$info['type']; | ||
| 64 | - return response($content, 200, $header); | 105 | + // 发送完整响应 |
| 106 | + foreach ($header as $name => $value) { | ||
| 107 | + header("$name: $value"); | ||
| 108 | + } | ||
| 109 | + echo $content; | ||
| 110 | + exit; | ||
| 65 | } | 111 | } |
| 66 | /** | 112 | /** |
| 67 | * 图片上传 | 113 | * 图片上传 |
| @@ -73,6 +119,7 @@ class FileController | @@ -73,6 +119,7 @@ class FileController | ||
| 73 | 'file.required'=>'必须填写', | 119 | 'file.required'=>'必须填写', |
| 74 | ]); | 120 | ]); |
| 75 | $files = $this->request->file('file'); | 121 | $files = $this->request->file('file'); |
| 122 | + | ||
| 76 | if (empty($files)) { | 123 | if (empty($files)) { |
| 77 | $this->response('没有上传的文件!', 400); | 124 | $this->response('没有上传的文件!', 400); |
| 78 | } | 125 | } |
| @@ -4,6 +4,8 @@ namespace App\Http\Logic\Bside\AyrShare; | @@ -4,6 +4,8 @@ namespace App\Http\Logic\Bside\AyrShare; | ||
| 4 | 4 | ||
| 5 | use App\Http\Logic\Bside\BaseLogic; | 5 | use App\Http\Logic\Bside\BaseLogic; |
| 6 | use App\Models\AyrShare\AyrRelease; | 6 | use App\Models\AyrShare\AyrRelease; |
| 7 | +use App\Models\File\File; | ||
| 8 | +use App\Models\File\Image; | ||
| 7 | 9 | ||
| 8 | class AyrReleaseLogic extends BaseLogic | 10 | class AyrReleaseLogic extends BaseLogic |
| 9 | { | 11 | { |
| @@ -17,7 +19,7 @@ class AyrReleaseLogic extends BaseLogic | @@ -17,7 +19,7 @@ class AyrReleaseLogic extends BaseLogic | ||
| 17 | } | 19 | } |
| 18 | 20 | ||
| 19 | /** | 21 | /** |
| 20 | - * @name :()release_info | 22 | + * @name :(获取详情)release_info |
| 21 | * @author :lyh | 23 | * @author :lyh |
| 22 | * @method :post | 24 | * @method :post |
| 23 | * @time :2023/5/9 16:27 | 25 | * @time :2023/5/9 16:27 |
| @@ -36,26 +38,35 @@ class AyrReleaseLogic extends BaseLogic | @@ -36,26 +38,35 @@ class AyrReleaseLogic extends BaseLogic | ||
| 36 | * @time :2023/5/9 9:38 | 38 | * @time :2023/5/9 9:38 |
| 37 | */ | 39 | */ |
| 38 | public function release_add(){ | 40 | public function release_add(){ |
| 41 | + $this->param['project_id'] = $this->user['project_id']; | ||
| 42 | + $this->param['operator_id'] = $this->user['id']; | ||
| 39 | $rs = $this->model->add($this->param); | 43 | $rs = $this->model->add($this->param); |
| 40 | if($rs === false){ | 44 | if($rs === false){ |
| 41 | $this->fail('error'); | 45 | $this->fail('error'); |
| 42 | } | 46 | } |
| 43 | return $this->success(); | 47 | return $this->success(); |
| 44 | } | 48 | } |
| 45 | - | ||
| 46 | /** | 49 | /** |
| 47 | - * @name :(上传第三方平台)0ayr_release_add | 50 | + * @name :(上传第三方图片参数处理)get_param |
| 48 | * @author :lyh | 51 | * @author :lyh |
| 49 | * @method :post | 52 | * @method :post |
| 50 | - * @time :2023/5/9 10:02 | 53 | + * @time :2023/5/10 10:27 |
| 51 | */ | 54 | */ |
| 52 | - public function ayr_release_add($param){ | ||
| 53 | - $param = [ | ||
| 54 | - 'post'=>$this->param['content'], | ||
| 55 | - 'platforms'=>$this->param['platforms'], | ||
| 56 | - 'mediaUrls'=>$this->param['mediaUrls'], | ||
| 57 | - ]; | ||
| 58 | - return $this->success($param); | 55 | + public function image_file_param($data) { |
| 56 | + $arr = []; | ||
| 57 | + foreach ($data as $k => $v){ | ||
| 58 | + if($k == 'images'){ | ||
| 59 | + $images = explode(',',$v); | ||
| 60 | + $imageModel = new Image(); | ||
| 61 | + $list = $imageModel->list(['hash'=>['in',$images]],'id'); | ||
| 62 | + foreach ($list as $v1){ | ||
| 63 | + $arr[] = $v1['ayr_url']; | ||
| 64 | + } | ||
| 65 | + }else{ | ||
| 66 | + $arr[] = url('/b/file_hash/' . $v.rand(10000,99999).'mp4');; | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | + return $this->success($arr); | ||
| 59 | } | 70 | } |
| 60 | 71 | ||
| 61 | /** | 72 | /** |
| @@ -2,10 +2,10 @@ | @@ -2,10 +2,10 @@ | ||
| 2 | 2 | ||
| 3 | namespace App\Http\Logic\Bside\AyrShare; | 3 | namespace App\Http\Logic\Bside\AyrShare; |
| 4 | 4 | ||
| 5 | -use App\Helper\AyrShare as AyrShareHelper; | ||
| 6 | -use App\Http\Controllers\file\ImageController; | ||
| 7 | use App\Http\Logic\Bside\BaseLogic; | 5 | use App\Http\Logic\Bside\BaseLogic; |
| 8 | use App\Models\AyrShare\AyrShare; | 6 | use App\Models\AyrShare\AyrShare; |
| 7 | +use App\Models\File\File as FileModel; | ||
| 8 | +use App\Models\File\Image as ImageModel; | ||
| 9 | 9 | ||
| 10 | class AyrShareLogic extends BaseLogic | 10 | class AyrShareLogic extends BaseLogic |
| 11 | { | 11 | { |
| @@ -48,7 +48,7 @@ class AyrShareLogic extends BaseLogic | @@ -48,7 +48,7 @@ class AyrShareLogic extends BaseLogic | ||
| 48 | * @time :2023/5/6 10:16 | 48 | * @time :2023/5/6 10:16 |
| 49 | */ | 49 | */ |
| 50 | public function ayr_share_info(){ | 50 | public function ayr_share_info(){ |
| 51 | - $info = $this->model->read(['id'=>$this->param['id']]); | 51 | + $info = $this->model->read(['id'=>$this->param['share_id']]); |
| 52 | if($info === false){ | 52 | if($info === false){ |
| 53 | $this->fail('当前数据不存在或已被删除'); | 53 | $this->fail('当前数据不存在或已被删除'); |
| 54 | } | 54 | } |
| @@ -82,26 +82,76 @@ class AyrShareLogic extends BaseLogic | @@ -82,26 +82,76 @@ class AyrShareLogic extends BaseLogic | ||
| 82 | } | 82 | } |
| 83 | return $this->success(); | 83 | return $this->success(); |
| 84 | } | 84 | } |
| 85 | + /** | ||
| 86 | + * @name :(更新图片库)save_info_info | ||
| 87 | + * @author :lyh | ||
| 88 | + * @method :post | ||
| 89 | + * @time :2023/5/10 15:01 | ||
| 90 | + */ | ||
| 91 | + public function save_img_info($hash){ | ||
| 92 | + $imageModel = new ImageModel(); | ||
| 93 | + $info = $imageModel->read(['hash'=>$hash]); | ||
| 94 | + if($info === false){ | ||
| 95 | + $this->fail('error'); | ||
| 96 | + } | ||
| 97 | + return $this->success(); | ||
| 98 | + } | ||
| 85 | 99 | ||
| 86 | /** | 100 | /** |
| 87 | - * @name :(向第三方平台发布帖子)api_public_msg | 101 | + * @name :(更新图片库)save_info_info |
| 88 | * @author :lyh | 102 | * @author :lyh |
| 89 | * @method :post | 103 | * @method :post |
| 90 | - * @time :2023/5/8 9:11 | 104 | + * @time :2023/5/10 15:01 |
| 91 | */ | 105 | */ |
| 92 | - public function send_public_post($param){ | ||
| 93 | - //获取图片 | ||
| 94 | - $image_c = new ImageController(); | ||
| 95 | - $image_info = $image_c->index($param['hash']); | ||
| 96 | - $param = [ | ||
| 97 | - 'post'=>$param['text'], | ||
| 98 | - 'mediaUrls'=>$image_info, | ||
| 99 | - 'platforms'=>$this->param['platforms'], | 106 | + public function save_file_info($hash){ |
| 107 | + $fileModel = new FileModel(); | ||
| 108 | + $info = $fileModel->read(['hash'=>$hash]); | ||
| 109 | + if($info === false){ | ||
| 110 | + $this->fail('error'); | ||
| 111 | + } | ||
| 112 | + return $this->success(); | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + /** | ||
| 116 | + * @name :(更新图片库)save_img | ||
| 117 | + * @author :lyh | ||
| 118 | + * @method :post | ||
| 119 | + * @time :2023/5/10 15:01 | ||
| 120 | + */ | ||
| 121 | + public function save_img($param_data){ | ||
| 122 | + //根据文件hash存入数据库 | ||
| 123 | + $ayr_data = [ | ||
| 124 | + 'ayr_id'=>$param_data['id'], | ||
| 125 | + 'ayr_url'=>$param_data['url'], | ||
| 126 | + 'ayr_url_link'=>$param_data['url_1080'] | ||
| 127 | + ]; | ||
| 128 | + $imageModel = new ImageModel(); | ||
| 129 | + $rs = $imageModel->edit($ayr_data,['hash'=>$this->param['hash']]); | ||
| 130 | + if($rs === false){ | ||
| 131 | + $this->fail('更新失败'); | ||
| 132 | + } | ||
| 133 | + return $this->success(); | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + /** | ||
| 137 | + * @name :(更新文件库)save_img | ||
| 138 | + * @author :lyh | ||
| 139 | + * @method :post | ||
| 140 | + * @time :2023/5/10 15:01 | ||
| 141 | + */ | ||
| 142 | + public function save_file($param_data){ | ||
| 143 | + //根据文件hash存入数据库 | ||
| 144 | + $ayr_data = [ | ||
| 145 | + 'ayr_id'=>$param_data['id'], | ||
| 146 | + 'ayr_url'=>$param_data['url'], | ||
| 147 | + 'ayr_url_link'=>$param_data['url_1080'] | ||
| 100 | ]; | 148 | ]; |
| 101 | - //发布帖子 | ||
| 102 | - $ayrShareHelper = new AyrShareHelper(); | ||
| 103 | - $res = $ayrShareHelper->post_send_msg($param); | ||
| 104 | - $this->success($res); | 149 | + $imageModel = new FileModel(); |
| 150 | + $rs = $imageModel->edit($ayr_data,['hash'=>$this->param['hash']]); | ||
| 151 | + if($rs === false){ | ||
| 152 | + $this->fail('更新失败'); | ||
| 153 | + } | ||
| 154 | + return $this->success(); | ||
| 105 | } | 155 | } |
| 106 | } | 156 | } |
| 107 | 157 |
| @@ -29,9 +29,9 @@ class LoginAuthMiddleware | @@ -29,9 +29,9 @@ class LoginAuthMiddleware | ||
| 29 | if(empty($info)){ | 29 | if(empty($info)){ |
| 30 | return response(['code'=>Code::USER_ERROR,'msg'=>'当前用户未登录']); | 30 | return response(['code'=>Code::USER_ERROR,'msg'=>'当前用户未登录']); |
| 31 | } | 31 | } |
| 32 | -// // 设置数据信息 | 32 | + // 设置数据信息 |
| 33 | $project = ProjectServer::useProject($info['project_id']); | 33 | $project = ProjectServer::useProject($info['project_id']); |
| 34 | - if(empty($project)){ | 34 | + if($project){ |
| 35 | return response(['code'=>Code::USER_ERROR,'msg'=>'数据库未配置']); | 35 | return response(['code'=>Code::USER_ERROR,'msg'=>'数据库未配置']); |
| 36 | } | 36 | } |
| 37 | //操作权限设置 | 37 | //操作权限设置 |
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace App\Http\Requests\Bside\AyrRelease; | ||
| 4 | + | ||
| 5 | +use Illuminate\Foundation\Http\FormRequest; | ||
| 6 | + | ||
| 7 | +class AyrReleaseRequest extends FormRequest | ||
| 8 | +{ | ||
| 9 | + /** | ||
| 10 | + * Determine if the user is authorized to make this request. | ||
| 11 | + * | ||
| 12 | + * @return bool | ||
| 13 | + */ | ||
| 14 | + public function authorize() | ||
| 15 | + { | ||
| 16 | + return true; | ||
| 17 | + } | ||
| 18 | + /** | ||
| 19 | + * Get the validation rules that apply to the request. | ||
| 20 | + * | ||
| 21 | + * @return array | ||
| 22 | + */ | ||
| 23 | + public function rules() | ||
| 24 | + { | ||
| 25 | + return [ | ||
| 26 | + 'title'=>'required', | ||
| 27 | + 'images'=>'required', | ||
| 28 | + 'video'=>'required', | ||
| 29 | + 'content'=>'required', | ||
| 30 | + 'share_id'=>'required', | ||
| 31 | + 'platforms'=>'required', | ||
| 32 | + 'idempotency_key'=>'required', | ||
| 33 | + ]; | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + public function messages() | ||
| 37 | + { | ||
| 38 | + return [ | ||
| 39 | + 'name.required'=>'参数错误', | ||
| 40 | + ]; | ||
| 41 | + } | ||
| 42 | +} |
| @@ -7,4 +7,30 @@ use App\Models\Base; | @@ -7,4 +7,30 @@ use App\Models\Base; | ||
| 7 | class AyrShare extends Base | 7 | class AyrShare extends Base |
| 8 | { | 8 | { |
| 9 | protected $table = 'gl_ayr_share'; | 9 | protected $table = 'gl_ayr_share'; |
| 10 | + | ||
| 11 | + const TYPE_FACEBOOK = 1; | ||
| 12 | + const TYPE_TWITTER = 2; | ||
| 13 | + const TYPE_LINKEDIN = 3; | ||
| 14 | + const TYPE_INSTAGRAM = 4; | ||
| 15 | + const TYPE_YOUTUBE = 5; | ||
| 16 | + const TYPE_REDDIT = 6; | ||
| 17 | + const TYPE_TELEGRAM = 7; | ||
| 18 | + const TYPE_GMB = 8; | ||
| 19 | + const TYPE_PINTEREST = 9; | ||
| 20 | + const TYPE_TIKTOK = 10; | ||
| 21 | + /** | ||
| 22 | + * @var :授权列表 | ||
| 23 | + */ | ||
| 24 | + public $platforms = [ | ||
| 25 | + self::TYPE_FACEBOOK => 'Facebook', | ||
| 26 | + self::TYPE_TWITTER => 'Twitter', | ||
| 27 | + self::TYPE_LINKEDIN => 'LinkedIn', | ||
| 28 | + self::TYPE_INSTAGRAM => 'Instagram', | ||
| 29 | + self::TYPE_YOUTUBE => 'YouTube', | ||
| 30 | + self::TYPE_REDDIT => 'Reddit', | ||
| 31 | + self::TYPE_TELEGRAM => 'Telegram', | ||
| 32 | + self::TYPE_GMB => 'Google', | ||
| 33 | + self::TYPE_PINTEREST => 'Pinterest', | ||
| 34 | + self::TYPE_TIKTOK => 'TikTok', | ||
| 35 | + ]; | ||
| 10 | } | 36 | } |
| @@ -8,7 +8,8 @@ use App\Models\User\User; | @@ -8,7 +8,8 @@ use App\Models\User\User; | ||
| 8 | class Blog extends Base | 8 | class Blog extends Base |
| 9 | { | 9 | { |
| 10 | protected $table = 'gl_blog'; | 10 | protected $table = 'gl_blog'; |
| 11 | - | 11 | + //连接数据库 |
| 12 | + protected $connection = 'custom_mysql'; | ||
| 12 | public function user(){ | 13 | public function user(){ |
| 13 | return $this->hasMany(User::class,'operator_id','id'); | 14 | return $this->hasMany(User::class,'operator_id','id'); |
| 14 | } | 15 | } |
| @@ -7,4 +7,7 @@ use App\Models\Base; | @@ -7,4 +7,7 @@ use App\Models\Base; | ||
| 7 | class BlogCategory extends Base | 7 | class BlogCategory extends Base |
| 8 | { | 8 | { |
| 9 | protected $table = 'gl_blog_category'; | 9 | protected $table = 'gl_blog_category'; |
| 10 | + //连接数据库 | ||
| 11 | + protected $connection = 'custom_mysql'; | ||
| 12 | + | ||
| 10 | } | 13 | } |
| @@ -8,20 +8,6 @@ class Image extends Base | @@ -8,20 +8,6 @@ class Image extends Base | ||
| 8 | { | 8 | { |
| 9 | protected $table = 'gl_image'; | 9 | protected $table = 'gl_image'; |
| 10 | 10 | ||
| 11 | - public $timestamps = true; | ||
| 12 | - | ||
| 13 | - /** | ||
| 14 | - * @param $hash | ||
| 15 | - * @name :(获取图片详情)image_read | ||
| 16 | - * @author :lyh | ||
| 17 | - * @method :post | ||
| 18 | - * @time :2023/5/4 11:50 | ||
| 19 | - */ | ||
| 20 | - public function image_read($hash){ | ||
| 21 | - $info = $this->read(['hash'=>$hash]); | ||
| 22 | - if(empty($info)){ | ||
| 23 | - return false; | ||
| 24 | - } | ||
| 25 | - return $info; | ||
| 26 | - } | 11 | + //连接数据库 |
| 12 | + protected $connection = 'custom_mysql'; | ||
| 27 | } | 13 | } |
| @@ -9,4 +9,6 @@ class Mail extends Base | @@ -9,4 +9,6 @@ class Mail extends Base | ||
| 9 | protected $table = 'gl_mail'; | 9 | protected $table = 'gl_mail'; |
| 10 | //自动维护create_at创建时间 updated_at修改时间 | 10 | //自动维护create_at创建时间 updated_at修改时间 |
| 11 | public $timestamps = true; | 11 | public $timestamps = true; |
| 12 | + //连接数据库 | ||
| 13 | + protected $connection = 'custom_mysql'; | ||
| 12 | } | 14 | } |
| @@ -9,4 +9,6 @@ class MailUser extends Base | @@ -9,4 +9,6 @@ class MailUser extends Base | ||
| 9 | protected $table = 'gl_mail_user'; | 9 | protected $table = 'gl_mail_user'; |
| 10 | //自动维护create_at创建时间 updated_at修改时间 | 10 | //自动维护create_at创建时间 updated_at修改时间 |
| 11 | public $timestamps = true; | 11 | public $timestamps = true; |
| 12 | + //连接数据库 | ||
| 13 | + protected $connection = 'custom_mysql'; | ||
| 12 | } | 14 | } |
| @@ -216,6 +216,13 @@ Route::middleware(['bloginauth'])->group(function () { | @@ -216,6 +216,13 @@ Route::middleware(['bloginauth'])->group(function () { | ||
| 216 | Route::any('/create', [\App\Http\Controllers\Bside\AyrShare\AyrShareController::class, 'create_account'])->name('ayr_create_account'); | 216 | Route::any('/create', [\App\Http\Controllers\Bside\AyrShare\AyrShareController::class, 'create_account'])->name('ayr_create_account'); |
| 217 | Route::any('/del', [\App\Http\Controllers\Bside\AyrShare\AyrShareController::class, 'del_account'])->name('ayr_del_account'); | 217 | Route::any('/del', [\App\Http\Controllers\Bside\AyrShare\AyrShareController::class, 'del_account'])->name('ayr_del_account'); |
| 218 | Route::any('/bind', [\App\Http\Controllers\Bside\AyrShare\AyrShareController::class, 'bind_account'])->name('ayr_bind_account'); | 218 | Route::any('/bind', [\App\Http\Controllers\Bside\AyrShare\AyrShareController::class, 'bind_account'])->name('ayr_bind_account'); |
| 219 | + //社交绑定 | ||
| 220 | + Route::prefix('release')->group(function () { | ||
| 221 | + Route::any('/info', [\App\Http\Controllers\Bside\AyrShare\AyrReleaseController::class, 'info'])->name('ayr_release_info'); | ||
| 222 | + Route::any('/share_info', [\App\Http\Controllers\Bside\AyrShare\AyrReleaseController::class, 'share_info'])->name('ayr_release_share_info'); | ||
| 223 | + Route::any('/send', [\App\Http\Controllers\Bside\AyrShare\AyrReleaseController::class, 'send_post'])->name('ayr_release_send'); | ||
| 224 | + Route::any('/send_media', [\App\Http\Controllers\Bside\AyrShare\AyrReleaseController::class, 'send_media'])->name('ayr_release_send_media'); | ||
| 225 | + }); | ||
| 219 | }); | 226 | }); |
| 220 | 227 | ||
| 221 | 228 | ||
| @@ -228,7 +235,6 @@ Route::middleware(['bloginauth'])->group(function () { | @@ -228,7 +235,6 @@ Route::middleware(['bloginauth'])->group(function () { | ||
| 228 | Route::get('/custom-chunk', [\App\Http\Controllers\Bside\TemplateController::class, 'customChunk'])->name('bside_template_custom_chunk'); | 235 | Route::get('/custom-chunk', [\App\Http\Controllers\Bside\TemplateController::class, 'customChunk'])->name('bside_template_custom_chunk'); |
| 229 | Route::get('/system', [\App\Http\Controllers\Bside\TemplateController::class, 'system_all_html'])->name('template_header_footer_system'); | 236 | Route::get('/system', [\App\Http\Controllers\Bside\TemplateController::class, 'system_all_html'])->name('template_header_footer_system'); |
| 230 | }); | 237 | }); |
| 231 | - | ||
| 232 | // 自定义页面,专题页 | 238 | // 自定义页面,专题页 |
| 233 | Route::prefix('custom')->group(function () { | 239 | Route::prefix('custom')->group(function () { |
| 234 | Route::get('/', [\App\Http\Controllers\Bside\CustomController::class, 'index'])->name('bside_custom'); | 240 | Route::get('/', [\App\Http\Controllers\Bside\CustomController::class, 'index'])->name('bside_custom'); |
| @@ -237,20 +243,14 @@ Route::middleware(['bloginauth'])->group(function () { | @@ -237,20 +243,14 @@ Route::middleware(['bloginauth'])->group(function () { | ||
| 237 | Route::delete('/delete', [\App\Http\Controllers\Bside\CustomController::class, 'delete'])->name('bside_custom_delete'); | 243 | Route::delete('/delete', [\App\Http\Controllers\Bside\CustomController::class, 'delete'])->name('bside_custom_delete'); |
| 238 | Route::any('/html/{id}', [\App\Http\Controllers\Bside\CustomController::class, 'html'])->where('id','\d+')->name('bside_custom_delete'); | 244 | Route::any('/html/{id}', [\App\Http\Controllers\Bside\CustomController::class, 'html'])->where('id','\d+')->name('bside_custom_delete'); |
| 239 | }); | 245 | }); |
| 240 | - | ||
| 241 | - | ||
| 242 | // 导航栏编辑 | 246 | // 导航栏编辑 |
| 243 | Route::prefix('nav')->group(function () { | 247 | Route::prefix('nav')->group(function () { |
| 244 | Route::get('/', [\App\Http\Controllers\Bside\NavController::class, 'index'])->name('bside_nav'); | 248 | Route::get('/', [\App\Http\Controllers\Bside\NavController::class, 'index'])->name('bside_nav'); |
| 245 | Route::post('/create', [\App\Http\Controllers\Bside\NavController::class, 'create'])->name('bside_nav_create'); | 249 | Route::post('/create', [\App\Http\Controllers\Bside\NavController::class, 'create'])->name('bside_nav_create'); |
| 246 | Route::post('/update', [\App\Http\Controllers\Bside\NavController::class, 'update'])->name('bside_nav_update'); | 250 | Route::post('/update', [\App\Http\Controllers\Bside\NavController::class, 'update'])->name('bside_nav_update'); |
| 247 | Route::delete('/delete', [\App\Http\Controllers\Bside\NavController::class, 'delete'])->name('bside_nav_delete'); | 251 | Route::delete('/delete', [\App\Http\Controllers\Bside\NavController::class, 'delete'])->name('bside_nav_delete'); |
| 248 | - Route::get('/default-urls', [\App\Http\Controllers\Bside\NavController::class, 'urls'])->name('bside_nav_default_urls'); | ||
| 249 | }); | 252 | }); |
| 250 | 253 | ||
| 251 | - | ||
| 252 | - | ||
| 253 | - | ||
| 254 | }); | 254 | }); |
| 255 | 255 | ||
| 256 | //无需登录验证的路由组 | 256 | //无需登录验证的路由组 |
| @@ -258,6 +258,6 @@ Route::group([], function () { | @@ -258,6 +258,6 @@ Route::group([], function () { | ||
| 258 | Route::any('/login', [\App\Http\Controllers\Bside\ComController::class, 'login'])->name('login'); | 258 | Route::any('/login', [\App\Http\Controllers\Bside\ComController::class, 'login'])->name('login'); |
| 259 | // Route::any('/', [\App\Http\Controllers\Bside\ComController::class, 'get_country'])->name('get_country'); | 259 | // Route::any('/', [\App\Http\Controllers\Bside\ComController::class, 'get_country'])->name('get_country'); |
| 260 | Route::get('/file/download', [\App\Http\Controllers\Bside\FileController::class, 'download'])->name('file_download'); | 260 | Route::get('/file/download', [\App\Http\Controllers\Bside\FileController::class, 'download'])->name('file_download'); |
| 261 | - Route::any('/image/{hash}/{w?}/{h?}', [\App\Http\Controllers\file\ImageController::class,'index'])->name('image_show'); | ||
| 262 | - Route::any('/file_hash/{hash}', [\App\Http\Controllers\file\FileController::class,'index'])->name('file_show'); | 261 | + Route::any('/image/{hash}/{type?}/{w?}/{h?}', [\App\Http\Controllers\file\ImageController::class,'index'])->name('image_show'); |
| 262 | + Route::any('/file_hash/{hash}/', [\App\Http\Controllers\file\FileController::class,'index'])->name('file_show'); | ||
| 263 | }); | 263 | }); |
-
请 注册 或 登录 后发表评论