TencentCosService.php 3.0 KB
<?php

namespace App\Services;

/**
 * @remark :腾讯cos上传
 * @class  :TencentCosService.php
 * @author :lyh
 * @time   :2023/7/18 16:46
 */
class TencentCosService extends BaseService
{
    public $cos = [];//cos配置

    public $method = '';//请求方式

    public $time = 86400;//签名有效时间

    public $config = [
        'cosRegion' => 'COS_REGION', // 存储桶地域
        'appId' => 'COS_APP_ID', // 腾讯云应用ID
        'secretId' => 'COS_SECRET_ID', // 腾讯云API的SecretId
        'secretKey' => 'COS_SECRET_KEY', // 腾讯云API的SecretKey
        'bucket' => 'COS_BUCKET', // 存储桶名称
    ];

    public function __construct(){
        $this->cos = config('filesystems.disks.cos');
        $this->config['cosRegion'] = $this->cos['region'];
        $this->config['appId'] = $this->cos['credentials']['appId'];
        $this->config['secretId'] = $this->cos['credentials']['secretId'];
        $this->config['secretKey'] = $this->cos['credentials']['secretKey'];
        $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){
        // 构建请求URL
        $pathname = '/'.$this->config['bucket'].$path.'/'.$fileName;
        $url = 'https://'.$this->config['bucket'].'.cos.'.$this->config['cosRegion'].'.myqcloud.com'.$pathname;
        $date = gmdate('D, d M Y H:i:s T');
        $signKey = hash_hmac('sha1', $date, $this->config['secretKey']);
        $method = 'PUT';
        $signature = base64_encode(hash_hmac('sha1', "{$method}\n\n\n\n", $signKey, true));
        $headers = array(
            'Authorization: QCloud ' . $this->config['secretId'] . ':' . $signature,
            'Date: ' . $date,
            'Host: ' . $this->config['bucket'] . '.cos.' . $this->config['cosRegion'] . '.myqcloud.com'
        );
        // 打开文件流
        $url_path = config('filesystems.disks.upload')['root'].$path.'/'.$fileName;
        $fileContent = file_get_contents($url_path);
        return $this->http_put($url,$fileContent);
    }

    /**
     * @remark :上传文件到第三方
     * @name   : (http_put
     * @author :lyh
     * @method :post
     * @time   :2023/7/18 17:06
     */
    public function http_put($url,$filePath,$headers){
        // 执行请求
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_PUT, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_INFILE, fopen($filePath, 'rb'));
        curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePath));
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        $response = curl_exec($ch);
        curl_close($ch);
        // 检查响应结果
        if ($response) {
            var_dump($response);
            echo '图片上传成功';
        } else {
            echo '图片上传失败';
        }
    }

}