<?php

namespace app\service;

use think\facade\Config;
use think\facade\Log;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;

class Qiniu
{
    private static $oss = null;

    private function __construct()
    {
    }

    private function __clone()
    {
    }

    /**
     * 七牛云OSS
     *
     */
    public static function config()
    {
        Config::load('extra/qiniu', 'qiniu');
        return config('qiniu');
    }

    // 七牛云OSS实例  单例模式
    public static function instance(): ?OssClient
    {
        if (self::$oss == null) {
            try {
                $conf = self::config();
                self::$oss =  new OssClient($conf['accessKeyId'], $conf['accessKeySecret'], $conf['endpoint']);
            } catch (OssException $e) {
                Log::error('实例化阿里云OSS失败: ' . $e->getMessage());
                return null;
            }
        }
        return self::$oss;
    }

    public static function aa()
    {
        $conf = self::config();
        // 控制台获取密钥:https://portal.qiniu.com/user/key
        $accessKey = $conf['qiniuAccessKey'];
        $secretKey = getenv('qiniuSecretKey');
        $bucket = getenv('bucket');

        // 构建鉴权对象
        $auth = new Auth($accessKey, $secretKey);

        // 生成上传 Token
        $token = $auth->uploadToken($bucket);

        // 要上传文件的本地路径
        $filePath = './php-logo.png';

        // 上传到七牛存储后保存的文件名
        $key = 'my-php-logo.png';

        // 初始化 UploadManager 对象并进行文件的上传。
        $uploadMgr = new UploadManager();

        // 调用 UploadManager 的 putFile 方法进行文件的上传,该方法会判断文件大小,进而决定使用表单上传还是分片上传,无需手动配置。
        list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
        echo "\n====> putFile result: \n";
        if ($err !== null) {
            var_dump($err);
        } else {
            var_dump($ret);
        }
    }
}