userCon = $userCon; } public static function getOssClient() { try { $ossClient = new OssClient(config('alioss.id'), config('alioss.secret'), config('alioss.host')); } catch (\OSS\Core\OssException $e) { return false; } return $ossClient; } // public function upload(Request $request) { $file = $_FILES['fileData']; //延时0.5秒,避免出现上传头像找不到图片问题 usleep(500000); return $this->uploadFile($file); } /** * 不需要登录就可以上传头像 * 上传完图片 进行图片检测 */ public function uploadNotLogin(Request $request) { $file = $_FILES['fileData']; //延时0.5秒,避免出现上传头像找不到图片问题 usleep(500000); $url = $this->uploadFile($file); $result = \CommonUtilsService::imageContentCecurity([$url]); if ($result && isset($result['result']) && $result['result']) { return $this->failure('图片异常',$result); }else{ return $this->success('upload_ok',$url); } } public function officialUpload(Request $request) { $param = array_filter($request->input()); $arr['zheng'] = $param['file_positive']; $arr['fan'] = $param['file_side']; $user = auth()->user(); $Afiles = []; foreach ($arr as $k => $v) { $Afiles[] = $v; } $user_id = $user->id; $has_history = ApproveHistory::where('user_id', $user_id)->where('status', 0)->count(); if ($has_history) { return $this->failure('已有待审核的认证'); } $Ainfo = ApproveHistory::where('user_id', $user_id)->get()->toArray(); if (!empty($Ainfo)) { if ($Ainfo[0]['status'] == 1) return $this->failure('已经认证,请不要重复提交!'); } User::where('id', $user_id)->update(['identification_photos' => json_encode($Afiles, true)]); $Acreate = []; $Acreate['user_id'] = $user_id; $Acreate['type'] = 'name'; $Acreate['status'] = 0; if (!empty($Ainfo)) { ApproveHistory::where('user_id', $user_id)->update(['status' => 0]); } else { ApproveHistory::create($Acreate); } return $this->success('upload_ok', array_values($Afiles)); } public function saveIdCardPhoto($file) { //生成新二维码云端全URI $object = date('Y') . date('m') . "/" . date('d') . "/" . $file['name']; $file_url = 'https://' . config('alioss.picture_domain') . '/' . $object; require_once base_path('vendor/aliyuncs/oss-sdk-php') . '/autoload.php'; //连接aliyun oss server try { $ossClient = new \OSS\OssClient(config('alioss.id'), config('alioss.secret'), config('alioss.host')); } catch (\OSS\Core\OssException $e) { return $this->failure('oss_connect_failure', $e->getMessage()); } //上传图片到aliyun oss try { $result = $ossClient->uploadFile(config('alioss.buckets.picture'), $object, $file['tmp_name']); } catch (\OSS\Core\OssException $e) { return $this->failure('oss_put_failure', $e->getMessage()); } return $file_url; } //上传文件  public function uploadFile($file) { $type_arr = ['text/html', 'text/htm']; if (in_array($file['type'], $type_arr)) return $this->failure('后缀名错误'); //生成新二维码云端全URI $path = Request()->path ? Request()->path : date('Y') . date('m') . "/" . date('d'); $object = $path . "/" . $file['name']; $file_url = 'https://' . config('alioss.picture_domain') . '/' . $object; require_once base_path('vendor/aliyuncs/oss-sdk-php') . '/autoload.php'; //连接aliyun oss server try { $ossClient = new \OSS\OssClient(config('alioss.id'), config('alioss.secret'), config('alioss.host')); } catch (\OSS\Core\OssException $e) { return $this->failure('oss_connect_failure', $e->getMessage()); } //上传图片到aliyun oss try { $result = $ossClient->uploadFile(config('alioss.buckets.picture'), $object, $file['tmp_name']); } catch (\OSS\Core\OssException $e) { return $this->failure('oss_put_failure', $e->getMessage()); } //内容安全-图片 // $result = \CommonUtilsService::imageContentCecurity([$file_url]); // if ($result && isset($result['result']) && $result['result']) { // return $this->failure('图片' . $result['result'] . ',请换一张照片'); // } return $this->success('upload_ok', $file_url); } public function uploadFiles(Request $request) { Log::info("上传文件"); $file_count = $request->input('file_count'); $files = []; for ($i = 0; $i < $file_count; $i++) { $files[] = $_FILES['file_' . $i]; } try { $ossClient = new \OSS\OssClient(config('alioss.id'), config('alioss.secret'), config('alioss.host')); $index = 0; $file_arr = []; foreach ($files as $file) { $object = date('Y') . date('m') . "/" . date('d') . "/" . $file['name']; $file_url = 'https://' . config('alioss.picture_domain') . '/' . $object; $file_arr[] = $file_url; $result = $ossClient->uploadFile(config('alioss.buckets.picture'), $object, $file['tmp_name']); $index++; } return $this->success('ok', $file_arr); } catch (\Exception $e) { $this->getError($e); return $this->failure('上传文件失败'); } } //获取Web真传签名 public function aliyunSignature(Request $request) { try { $id = config('alioss.id'); $key = config('alioss.secret'); $host = 'https://' . config('alioss.picture_domain'); // $host = 'https://ufutx-images.oss-accelerate.aliyuncs.com'; $now = time(); $expire = 60 * 30; //设置该policy超时时间是60s. 即这个policy过了这个有效时间,将不能访问 $end = $now + $expire; $expiration = $this->gmt_iso8601($end); $dir = date('Y') . date('m') . "/" . date('d') . "/"; //最大文件大小.用户可以自己设置 $condition = array(0 => 'content-length-range', 1 => 0, 2 => 1048576000); $conditions[] = $condition; //表示用户上传的数据,必须是以$dir开始, 不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录 $start = array(0 => 'starts-with', 1 => '$key', 2 => $dir); $conditions[] = $start; //这里默认设置是2020年.注意了,可以根据自己的逻辑,设定expire 时间.达到让前端定时到后面取signature的逻辑 $arr = array('expiration' => $expiration, 'conditions' => $conditions); $policy = json_encode($arr); $base64_policy = base64_encode($policy); $string_to_sign = $base64_policy; $signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true)); $callback_url = $request->root() . '/api/upload'; $callback_param = array( 'callbackUrl' => $callback_url, 'callbackBody' => 'filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}', 'callbackBodyType' => "application/x-www-form-urlencoded" ); $callback_string = json_encode($callback_param); $base64_callback_body = base64_encode($callback_string); $response = array(); $response['accessid'] = $id; $response['host'] = $host; $response['policy'] = $base64_policy; $response['signature'] = $signature; $response['expire'] = $end; //这个参数是设置用户上传指定的前缀 $response['dir'] = $dir; $response['picture_domain'] = config('alioss.picture_domain'); //$response['callback'] = $base64_callback_body; return $this->success('aliyun_signature', $response); } catch (\Exception $e) { \Log::error($e->getMessage()); return $this->failure("上传失败"); } } //aliyun get signature using private function gmt_iso8601($time) { $dtStr = date("c", $time); $mydatetime = new \DateTime($dtStr); $expiration = $mydatetime->format(\DateTime::ISO8601); $pos = strpos($expiration, '+'); $expiration = substr($expiration, 0, $pos); return $expiration . "Z"; } public function createUploadVideo(Request $request) { \Log::info(env('ALIYUN_VOD_ACCESS_KEY_ID')); try { $mp3_arr = ['wma','wav','ogg']; $mp4_arr = ['ma4','m4a','wmv','MOV','video/quicktime','mp4']; $file_name = $request->input('file_name'); $cover_url = $request->input('cover_url'); if (empty($file_name)) throw new \Exception('缺少视频源文件名', 1); $str = substr($file_name,strrpos($file_name,'.')+1); $query = [ 'query' => [ 'RegionId' => "cn-hangzhou", 'Title' => $file_name, 'FileName' => $file_name, 'CoverURL' => $cover_url, ], 'headers' =>[ 'referer' => 'http://love.ufutx.com' ] ]; if(in_array($str,$mp3_arr)){ $end = 'mp3'; $file_name = str_replace($str,$end,$file_name); $query['query']['FileName'] = $file_name; } if(in_array($str,$mp4_arr)){ $end = 'mp4'; $file_name = str_replace($str,$end,$file_name); $query['query']['FileName'] = $file_name; //$query['query']['TemplateGroupId'] = '0945f5dd3a9372ce390cf41d6d35e96b'; } AlibabaCloud::accessKeyClient(env('ALIYUN_VOD_ACCESS_KEY_ID'), env('ALIYUN_VOD_ACCESS_KEY_SECRET')) ->regionId('cn-hangzhou') ->asDefaultClient(); $result = AlibabaCloud::rpc() ->product('vod') // ->scheme('https') // https | http ->version('2017-03-21') ->action('CreateUploadVideo') ->method('POST') ->host('vod.cn-shanghai.aliyuncs.com') ->options($query) ->request(); $result = $result->toArray(); return $this->success('ok', $result); } catch (ClientException $e) { $this->getError($e); return $this->failure('视频上传失败,请稍后再试'); } catch (ServerException $e) { $this->getError($e); return $this->failure('视频上传失败,请稍后再试'); } catch (\Exception $e) { $this->getError($e); return $this->failure('视频上传失败,请稍后再试'); } } public function refreshUploadVideo(Request $request) { try { $video_id = $request->input('video_id'); if (empty($video_id)) throw new \Exception("渠道视频id", 1); AlibabaCloud::accessKeyClient(env('ALIYUN_VOD_ACCESS_KEY_ID'), env('ALIYUN_VOD_ACCESS_KEY_SECRET')) ->regionId('cn-hangzhou') ->asDefaultClient(); $result = AlibabaCloud::rpc() ->product('vod') // ->scheme('https') // https | http ->version('2017-03-21') ->action('RefreshUploadVideo') ->method('POST') ->host('vod.cn-shanghai.aliyuncs.com') ->options([ 'query' => [ 'RegionId' => "cn-hangzhou", 'VideoId' => $video_id, ], 'headers' =>[ 'referer' => 'http://lova.ufutx.com' ] ]) ->request(); $result = $result->toArray(); return $this->success('ok', $result); } catch (ClientException $e) { $this->getError($e); return $this->failure('视频上传失败,请稍后再试'); } catch (ServerException $e) { $this->getError($e); return $this->failure('视频上传失败,请稍后再试'); } catch (\Exception $e) { $this->getError($e); return $this->failure('视频上传失败,请稍后再试'); } } public function videoUrl(Request $request) { try { $video_id = $request->input('aliyun_video_id'); if (empty($video_id)) return $this->failure('缺少视频id'); $result = \AliyunService::getPlayInfo($video_id, 'vod-mp.ufutx.com'); $play_url = $result['PlayInfoList']['PlayInfo'][0]['PlayURL']; $cover_url = $result['VideoBase']['CoverURL'] ?? ''; return $this->success('ok', compact('play_url', 'cover_url')); } catch (\Exception $e) { //$this->getError($e); if($e->getCode() == 403){ return $this->jsonResponse(0,"视频审核中,请稍后重试"); }else{ return $this->failure('获取播放地址失败'); } } } }