前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LskyPro图床-强行支持多吉云

LskyPro图床-强行支持多吉云

作者头像
赤月未咲
发布2023-03-16 20:26:55
6570
发布2023-03-16 20:26:55
举报
文章被收录于专栏:AkatsukiAkatsuki

前言

接入其他存储的方案太过昂贵,多吉云就成了咱这普通人的最优选。

很可惜的是多吉云没有被任何一家图床程序接入,于是自己动手接入成了最后的选择。

离谱的多吉云

多吉云使用的是腾讯的COS作为底层然后又做了个API接口获取密钥

用多吉云的密钥访问自己的API接口来获取可以访问的密钥

而且密钥是三段式(accessKeyId/secretAccessKey/sessionToken)临时密钥

兼容多吉云

曲线救国方案临时版,并不是最优解

本来打算直接新增存储策略的,但是改半天都用不了,还给干500错误了

编辑文件 App/Enums/Strategy/S3Option.php 添加上 session_Token 转换 sessionToken

代码语言:javascript
复制
<?php

namespace App\Enums\Strategy;

final class S3Option
{
    /** @var string 访问url */
    const Url = 'url';

    /** @var string AccessKeyId */
    const AccessKeyId = 'access_key_id';

    /** @var string SecretAccessKey */
    const SecretAccessKey = 'secret_access_key';
    
    /** @var string sessionToken */
    const sessionToken = 'session_Token';

    /** @var string Endpoint */
    const Endpoint = 'endpoint';

    /** @var string 区域 */
    const Region = 'region';

    /** @var string Bucket */
    const Bucket = 'bucket';
}

编辑文件 app/Services/ImageService.php 给AwsS3添加上 sessionToken 的获取 'token' => $configs->get(S3Option::sessionToken)

代码语言:javascript
复制
StrategyKey::S3 => new AwsS3V3Adapter(
            client: new S3Client([
                'credentials' => [
                    'key'    => $configs->get(S3Option::AccessKeyId),
                    'secret' => $configs->get(S3Option::SecretAccessKey),
                    'token' => $configs->get(S3Option::sessionToken)
                ],
                'endpoint' => $configs->get(S3Option::Endpoint),
                'region' => $configs->get(S3Option::Region),
                'version' => '2006-03-01',
            ]),
            bucket: $configs->get(S3Option::Bucket),

新增一个php文件,命名随意,随便扔个地方调用一下,文件调用就可以获取把密钥传到数据库里了 因为是密钥有两小时可用时间,最好还是定时访问更新,直接调用也是可以的,不过要搞清楚优先级 每天的调用量是80000 次 / 天,想必用上多吉的都是穷逼一个,这个调用足够了

可以直接调用文件或者在开个网站内网hosts定时访问

代码语言:javascript
复制
<?php

// 曲线救国方案
// 多吉云的存储API为永久密钥,但是这是用来获取AWS S3临时密钥的
// 临时密钥有三个 accessKey,secretKey,sessionToken
// header('content-type:application/json');


function dogecloud_api($apiPath, $data = array(), $jsonMode = false) {
    // 这里替换为你的多吉云API的永久 AccessKey 和 SecretKey,可在用户中心 - 密钥管理中查看
    $accessKey = "XXXXXXXXXX";
    $secretKey = "XXXXXXXXXXXXX";

    $body = $jsonMode ? json_encode($data) : http_build_query($data);
    $signStr = $apiPath . "\n" . $body;
    $sign = hash_hmac('sha1', $signStr, $secretKey);
    $Authorization = "TOKEN " . $accessKey . ":" . $sign;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.dogecloud.com" . $apiPath);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); // 如果是本地调试,或者根本不在乎中间人攻击,可以把这里的 1 和 2 修改为 0,就可以避免报错
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 建议实际使用环境下 cURL 还是配置好本地证书
    if(isset($data) && $data){
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: ' . ($jsonMode ? 'application/json' : 'application/x-www-form-urlencoded'),
            'Authorization: ' . $Authorization
        ));
    }
    $ret = curl_exec($ch);
    curl_close($ch);
    return json_decode($ret, true);
}

$api = dogecloud_api('/auth/tmp_token.json', array(
    "channel" => "OSS_FULL",
    "scopes" => array("*")
), true);
// 临时密钥,两小时内有效,定时访问就行,随便怎么放
// 绑定Lsky的数据库
$servername = "XXXXXXX"; //数据库主机名
$dbname = "XXXXXX"; //使用的数据库
$username = "XXXXX"; //数据库连接用户名
$password = "XXXXX";//对应的密码


// 重构json表
$DogeAPI = [
    'url'  =>   'XXXXX', //云存储的访问域名,举例https://miraipip.2w2.top
    'bucket'    => 'XXXXX', //调用时所需的 s3Bucket 参数。
    'region' => 'automatic', //自动选区
    'queries' => '',
    'endpoint' => 'XXXXXXXXXXXXX',  //调用所需的 s3Endpoint 参数。如 https://cos.ap-guangzhou.myqcloud.com/
    'access_key_id' => $api['data']['Credentials']['accessKeyId'],
    'secret_access_key' => $api['data']['Credentials']['secretAccessKey'],
    'session_Token'  => $api['data']['Credentials']['sessionToken'],
    ];
$ApiData = json_encode($DogeAPI);
$ApiData = addslashes($ApiData);
// 你要是想看看原内容就把下面去了
// echo json_encode($api);

// 入库
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置 PDO 错误模式,用于抛出异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 下面是查询ID 100 的存储策略信息
    // 可以吧查询阉了保留更新
    $sql = "SELECT * FROM `strategies` WHERE `id` = 100 ";
    // 更新strategies表ID为 100 的 configs 值
    // 每创建一个存储策略的ID都是不一样的,你只需要找到用于多吉云AWS S3策略的ID就行了
    $sql = "UPDATE `strategies` SET `configs` = '$ApiData' WHERE `strategies`.`id` = 100";
    // 使用 exec() ,没有结果返回 
    $conn->exec($sql);
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;

        // $DogeAPI = $api['data']['Credentials'];
        // 写入文件
        // echo json_encode($DogeAPI);
        // $json_string = json_encode($DogeAPI);// 过滤
        // file_put_contents('user.json', $json_string);
        // $DogeCloudAPI = file_get_contents('user.json');


?>

以上就是全部了!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 离谱的多吉云
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档