当前位置: 首页 > news >正文

上传OSS直传

方式一:小程序端直接使用文件上传功能,获取上传的参数接口

配置依赖

composer require alibabacloud/credentials
<?php
require_once 'vendor/autoload.php';use AlibabaCloud\Credentials\Credential;// 设置bucket所处地域
$region = 'cn-hangzhou';
// 设置bucket名称
$bucket = 'bucketName';
$product = 'oss';// 创建阿里云凭证配置
$config = new Credential\Config([// 填写Credential类型,固定值为ecs_ram_role。'type' => 'ecs_ram_role',// 设置 ECS 实例的 RAM 角色名称'roleName' => "roleName",
]);
// 根据配置创建凭证对象
$credential = new Credential($config);
// 从凭证对象中获取凭证信息
$cred = $credential->getCredential();
// 获取当前的 UTC 时间
$utcTime = new DateTime('now', new DateTimeZone('UTC'));
// 格式化当前日期为 Ymd 格式,例如 20240101
$date = $utcTime->format('Ymd');
// 克隆当前时间对象,用于设置过期时间
$expiration = clone $utcTime;
// 设置过期时间为当前时间往后 1 小时
$expiration->add(new DateInterval('PT1H'));
// 构建policy
// 示例policy表单域只列举了部分必填字段,如有其他需求可参考签名版本4文档:https://help.aliyun.com/zh/oss/developer-reference/signature-version-4-recommend
$policyMap = ["expiration" => $expiration->format('Y-m-d\TH:i:s.000\Z'),"conditions" => [["bucket" => $bucket],["x-oss-signature-version" => "OSS4-HMAC-SHA256"],["x-oss-credential" => sprintf("%s/%s/%s/%s/aliyun_v4_request",$cred->getAccessKeyId(), $date, $region, $product)],["x-oss-date" => $utcTime->format('Ymd\THis\Z')],["x-oss-security-token" => $cred->getSecurityToken()],],
];
// 将policy转换为 JSON 格式的字符串
$policy = json_encode($policyMap);
// 对policy字符串进行 Base64 编码,得到待签名的字符串
$stringToSign = base64_encode($policy);
// 构建signingKey,由固定字符串 "aliyun_v4" 和访问密钥 Secret 拼接而成
$signingKey = "aliyun_v4" . $cred->getAccessKeySecret();
$h1Key = hmacSign($signingKey, $date);
$h2Key = hmacSign($h1Key, $region);
$h3Key = hmacSign($h2Key, $product);
$h4Key = hmacSign($h3Key, "aliyun_v4_request");// 使用 h4Key 对待签名的字符串进行 HMAC-SHA256 签名,得到最终的签名
$signature = hash_hmac('sha256', $stringToSign, $h4Key);// 构建响应给前端的表单数据,包含policy、签名版本、凭证、日期、签名和安全令牌等信息
echo json_encode(array('policy' => $stringToSign,"x_oss_signature_version" => "OSS4-HMAC-SHA256","x_oss_credential" => sprintf("%s/%s/%s/%s/aliyun_v4_request",$cred->getAccessKeyId(), $date, $region, $product),"x_oss_date" => $utcTime->format('Ymd\THis\Z'),"signature" => $signature,"security_token" => $cred->getSecurityToken()
));// hmacSign 函数,用于进行 HMAC-SHA256 签名计算
function hmacSign($key, $data)
{return hash_hmac('sha256', $data, $key, true);
}
方式二:小程序端使用OOS上传管理器,获取阿里云直传凭证STS Token

配置依赖

composer require alibabacloud/sdk

use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\STS\STS;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;/*** 小程序端获取阿里云直传凭证STS Token*/public function getOssStstoken(){// 配置参数,建议在应用配置文件中设置$config = ['accessKeyId'     => '', 'accessKeySecret' => '','bucket'         => '','endpoint'       => 'oss-cn-beijing.aliyuncs.com','regionId'         => 'oss-cn-beijing','roleArn'        => 'acs:ram::<你的阿里云账号ID>:role/<调用此接口的RAM角色名>','cdnurl'         => 'https://你的域名',// 上传配置'maxSize'        => 10485760, // 10MB'allowExt' => ['jpg', 'png', 'gif', 'jpeg', 'bmp'],'tokenExpireTime' => 3600, // 临时令牌有效期,单位秒,默认3600,最长可设置1小时];// 验证配置if (empty($config['accessKeyId']) || empty($config['accessKeySecret'])) {$this->error('阿里云配置不完整');}try {// 初始化阿里云客户端AlibabaCloud::accessKeyClient($config['accessKeyId'], $config['accessKeySecret'])->regionId($config['regionId'])->asDefaultClient();// 假设使用RAM角色获取临时令牌// 如果有RAM角色,使用AssumeRole方式if (!empty($config['roleArn'])) {$result = AlibabaCloud::rpc()->product('Sts')->version('2015-04-01')->action('AssumeRole')->method('POST')->scheme('https')->host('sts.aliyuncs.com')->options(['query' => ['RegionId' => $config['regionId'],'RoleArn' => $config['roleArn'],'RoleSessionName' => 'FastAdminApp','DurationSeconds' => $config['tokenExpireTime'],],])->request();$credentials = $result['Credentials'];} else {// 如果没有RAM角色,可以使用当前AccessKey(不推荐生产环境使用)exception('请配置RAM角色ARN');}// 返回令牌信息$data = ['accessKeyId' => $credentials['AccessKeyId'],'accessKeySecret' => $credentials['AccessKeySecret'],'securityToken' => $credentials['SecurityToken'],'expiration' => $credentials['Expiration'],'bucket' => $config['bucket'],'endpoint' => $config['endpoint'],'region' => $config['regionId']];} catch (ClientException $e) {$this->error('客户端错误: ' . $e->getErrorMessage());} catch (ServerException $e) {$this->error('服务端错误: ' . $e->getErrorMessage());} catch (\Exception $e) {$this->error('系统错误: ' . $e->getMessage());}$this->success('获取令牌成功', $data);}
http://www.dtcms.com/a/573979.html

相关文章:

  • 网站正在建设中页面 英文翻译网络网站建设电话
  • 外企渣打内推
  • TGRS 即插即用 | 超越传统U-Net!ASCNet融合小波变换与全局注意力,重新定义图像修复范式
  • 一线城市网站建设费用高wordpress调用id数据
  • BOD5快速测定仪:环境水质监测的高效解决方案
  • 【仓颉纪元】仓颉性能优化深度实战:5 天让应用提速 300%
  • 全网营销型网站建设公司wordpress 个人soho
  • Python 正则表达式实战 + 详解:从匹配QQ邮箱到掌握核心语法
  • 五度易链产业大脑技术拆解:AI + 大数据 + 云计算如何构建产业链数字基础设施?
  • 湖南如何做网络营销seo哪家好
  • 松北建设局网站网件路由器为什么都是官翻
  • 【Unity】接入腾讯TimPush通知消息推送
  • 使用WinBoat在Linux中安装window应用
  • 文档抽取技术:通过自然语言处理自动提取简历中的结构化信息,实现高效人才筛选
  • 蓝奥声EID+ECWAN架构:构建设备跨域用电数据无损迁移体系
  • 打车/网约车、代驾、顺风车/拼车、货运、租车等多种出行服务的一站式解决方案
  • MQTT协议
  • 网站开发设计培训价格建筑网建设通查询
  • 正规的网站建设官网环保类网站建设
  • 做电影资讯网站算侵权吗wordpress comment_form
  • 想在公司局域网做建网站全渠道运营平台系统
  • 上海网站设计大连网站优化公司
  • CAN通信配置要点与要求:从入门到精通的完整指南
  • 最近做网站开发有前途没精品网站建设
  • 潜江网站设计中山市网站建设哪家好
  • [大模型训练】权重更新
  • 哪做网站比较便宜外链发布
  • linux之中断子系统介绍(1)
  • 算法 day 45
  • 进入官方网站上海建网站方案