file('file'); if(empty($file)) { $this->error('参数不能为空'); } $commoninfo = Db::connect(config('think-orm.search_library')); $endpoint = $commoninfo->name('common_info')->where(['type' => 68])->find()['value']; $accessKeyId = $commoninfo->name('common_info')->where(['type' => 69])->find()['value']; $secretAccessKey = $commoninfo->name('common_info')->where(['type' => 70])->find()['value']; $bucket = $commoninfo->name('common_info')->where(['type' => 71])->find()['value']; $befor_url = $commoninfo->name('common_info')->where(['type' => 72])->find()['value']; putenv('OSS_ACCESS_KEY_ID=' . $accessKeyId); putenv('OSS_ACCESS_KEY_SECRET='. $secretAccessKey); $provider = new EnvironmentVariableCredentialsProvider(); $object = date('Ymd') . '/' . uniqid() . '.' .$file->getOriginalExtension(); try{ $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V1, ); $ossClient = new OssClient($config); // 以二进制模式读取文件内容 $handle = fopen($file->getRealPath(), 'rb'); $content = stream_get_contents($handle); fclose($handle); // 上传二进制内容,明确指定Content-Type $options = [ OssClient::OSS_CONTENT_LENGTH => strlen($content), OssClient::OSS_CONTENT_TYPE => $file->getMime(), // 禁用字符编码转换 'Content-Encoding' => 'binary', ]; $res = $ossClient->putObject($bucket, $object, $content, $options); Log::info('上传文件结果' . json_encode($res)); if(!empty($res['info'])) { return $this->ApiDataReturn(['data' => $befor_url . '/' . $object, 'msg' => 'success', 'code' => 0]); }else { $this->error('上传失败'); } } catch(OssException $e) { $this->error($e->getMessage()); } } // 获取阿里云oss存储相关配置 public function getCredentials() { $commoninfo = Db::connect(config('think-orm.search_library')); $configItems = $commoninfo->name('common_info')->whereIn('type', [66, 67, 69, 70]) ->column('value', 'type'); AlibabaCloud::accessKeyClient($configItems[69], $configItems[70]) ->regionId('cn-nanjing') ->asDefaultClient(); try { $result = AlibabaCloud::rpc()->product('Sts') ->options([ "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V1 ]) ->version('2015-04-01') ->action('AssumeRole') ->method('POST') ->host($configItems[66]) // Endpoint ->scheme('https') ->options([ 'query' => [ 'RoleArn' => $configItems[67], // 角色ARN 'RoleSessionName' => 'test', // 会话名称 'DurationSeconds' => 3600, // 凭证有效期(秒) ], ]) ->request(); // 获取响应中的凭证信息。 $credentials = $result['Credentials']; $this->n_success(['data' => [ 'accessKeyId' => $credentials['AccessKeyId'], 'accessKeySecret' => $credentials['AccessKeySecret'], 'expiration' => $credentials['Expiration'], 'securityToken' => $credentials['SecurityToken'], ]]); } catch (ClientException $e) { // 处理客户端异常。 echo $e->getErrorMessage() . PHP_EOL; } catch (ServerException $e) { // 处理服务端异常。 echo $e->getErrorMessage() . PHP_EOL; } } }