|
...
|
...
|
@@ -36,94 +36,30 @@ class TencentCosService extends BaseService |
|
|
|
$this->config['bucket'] = $this->cos['bucket'];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @remark :上传图片
|
|
|
|
* @name :upload
|
|
|
|
* @author :lyh
|
|
|
|
* @method :post
|
|
|
|
* @time :2023/7/18 16:56
|
|
|
|
*/
|
|
|
|
public function upload_image($path,$fileName,$image_type){
|
|
|
|
$contentType = 'image/'.$image_type;
|
|
|
|
$httpVerb = 'PUT';
|
|
|
|
$date = gmdate('D, d M Y H:i:s \G\M\T');
|
|
|
|
//生成 KeyTime
|
|
|
|
$keyTime = ( string )( time() - 60 ) . ';' . ( string )( strtotime( '+30 minutes' ) );
|
|
|
|
//生成 SignKey
|
|
|
|
$signKey = hash_hmac( 'sha1', $keyTime, trim($this->config['secretKey']) );
|
|
|
|
//生成 UrlParamList 和 HttpParameters
|
|
|
|
$queryParameters = \request()->query();
|
|
|
|
$sortedKeys = collect($queryParameters)->keys()->sort()->all();
|
|
|
|
$urlParamList = "";
|
|
|
|
$httpParameters = "";
|
|
|
|
foreach ($sortedKeys as $key) {
|
|
|
|
$encodedKey = Str::lower(rawurlencode($key));
|
|
|
|
$value = isset($queryParameters[$key]) ? rawurlencode($queryParameters[$key]) : "";
|
|
|
|
$urlParamList .= $encodedKey . ";";
|
|
|
|
$httpParameters .= $encodedKey . "=" . $value . "&";
|
|
|
|
public function uploadToCos($file,$path,$filename)
|
|
|
|
{
|
|
|
|
$objectKey = $path.'/',$filename;
|
|
|
|
// 上传到腾讯云 COS
|
|
|
|
$httpClient = new Client();
|
|
|
|
$response = $httpClient->request('PUT', "https://{$this->config['bucket']}.cos.{$this->config['cosRegion']}.myqcloud.com/{$objectKey}", [
|
|
|
|
'body' => file_get_contents($file->getRealPath()),
|
|
|
|
'headers' => $this->generateHeaders($this->config['secretId'], $this->config['secretKey']),
|
|
|
|
]);
|
|
|
|
// 若上传成功,则返回上传后的 URL
|
|
|
|
if ($response->getStatusCode() === 200) {
|
|
|
|
return "https://{$this->config['bucket']}.cos.{$this->config['cosRegion']}.myqcloud.com/{$objectKey}";
|
|
|
|
}
|
|
|
|
$urlParamList = rtrim($urlParamList, ";");
|
|
|
|
$httpParameters = rtrim($httpParameters, "&");
|
|
|
|
// 生成 HeaderList 和 HttpHeaders
|
|
|
|
$headers = \request()->headers->all();
|
|
|
|
$sortedKeys = collect($headers)->keys()->sort()->all();
|
|
|
|
$headerList = "";
|
|
|
|
$httpHeaders = "";
|
|
|
|
foreach ($sortedKeys as $key) {
|
|
|
|
$encodedKey = Str::lower(rawurlencode($key));
|
|
|
|
$value = rawurlencode($headers[$key][0]);
|
|
|
|
$headerList .= $encodedKey . ";";
|
|
|
|
$httpHeaders .= $encodedKey . "=" . $value . "&";
|
|
|
|
}
|
|
|
|
$headerList = rtrim($headerList, ";");
|
|
|
|
$httpHeaders = rtrim($httpHeaders, "&");
|
|
|
|
//生成HttpString
|
|
|
|
$httpMethod = Str::lower($httpVerb);
|
|
|
|
$uriPathname = \request()->getPathInfo();
|
|
|
|
$httpString = $httpMethod . "\n" . $uriPathname . "\n" . $httpParameters . "\n" . $httpHeaders . "\n";
|
|
|
|
//生成 StringToSign
|
|
|
|
$sha1String = sha1($httpString);
|
|
|
|
$stringToSign = "sha1\n" . $keyTime . "\n" . $sha1String . "\n";
|
|
|
|
$filePath = $path.'/'.$fileName;
|
|
|
|
$sign = hash_hmac( 'sha1', $stringToSign, $signKey );
|
|
|
|
$authorization =
|
|
|
|
"q-sign-algorithm=sha1&q-ak={$this->config['secretId']}&q-sign-time={$keyTime}&q-key-time={$keyTime}&q-header-list=&q-url-param-list=&q-signature={$sign}";
|
|
|
|
$url = "https://{$this->config['bucket']}.cos.{$this->config['cosRegion']}.myqcloud.com{$filePath}";
|
|
|
|
// 打开文件流
|
|
|
|
$filePathUrl = config('filesystems.disks.upload')['root'].$path.'/'.$fileName;
|
|
|
|
return $this->http_put($url,$contentType,$authorization,$date,$filePathUrl);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @remark :上传文件到第三方
|
|
|
|
* @name : (http_put
|
|
|
|
* @author :lyh
|
|
|
|
* @method :post
|
|
|
|
* @time :2023/7/18 17:06
|
|
|
|
*/
|
|
|
|
public function http_put($url,$contentType,$authorization,$date,$filePath){
|
|
|
|
// 执行请求
|
|
|
|
$ch = curl_init($url);
|
|
|
|
curl_setopt($ch, CURLOPT_PUT, true);
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
|
|
|
'Content-Type: ' . $contentType,
|
|
|
|
'Authorization: ' . $authorization,
|
|
|
|
'Date: ' . $date
|
|
|
|
));
|
|
|
|
curl_setopt($ch, CURLOPT_INFILE, fopen($filePath, 'r'));
|
|
|
|
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePath));
|
|
|
|
|
|
|
|
$response = curl_exec($ch);
|
|
|
|
curl_close($ch);
|
|
|
|
// 检查响应结果
|
|
|
|
if ($response) {
|
|
|
|
var_dump($response);
|
|
|
|
die();
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
private function generateHeaders($secretId, $secretKey)
|
|
|
|
{
|
|
|
|
$keyTime = time() - 1 . ';' . (time() + 300);
|
|
|
|
$signKey = hash_hmac('sha1', $keyTime, $secretKey);
|
|
|
|
$signature = hash_hmac('sha1', "sha1\n{$keyTime}\n\n", $signKey);
|
|
|
|
return [
|
|
|
|
'Authorization' => 'q-sign-algorithm=sha1&q-ak=' . $secretId . '&q-sign-time=' . $keyTime
|
|
|
|
. '&q-key-time=' . $keyTime . '&q-signature=' . $signature,
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
} |
...
|
...
|
|