PHP 后台授权RAM OSS 上传

功能介绍
uniapp插件地址
阿里云存储OSS 分片上传
解决uniapp 前端大文件上传问题

PHP后台操作

1.第一步阿里云RAM创建角色授权
阿里云创建文档
2.PHP请求阿里云授权接口获取签名参数

public function aliosstoken(){
        $array=[
            'Action'=>'AssumeRole',
            'SignatureVersion'=>'1.0',
            'Version'=>'2015-04-01',
            'RoleArn'=>"**********", //阿里云角色名称
            'RoleSessionName'=>"alice", 
            'Format'=>'JSON',
            'Timestamp'=>date('Y-m-d\TH:i:s\Z', time() - date('Z')),
            'AccessKeyId'=>"*******", //阿里云accesskeyid
            'SignatureMethod'=>'HMAC-SHA1',
            'SignatureNonce'=>substr(md5(rand(1, 99999999)), rand(1, 9), 14)
        ];
        $get_sign=$this->get_sign($array,'GET');//获取sign签名 get_sign方法在下方↓
        $array['Signature']=$get_sign['hmac']; //计算完签名之后,将签名放入请求数组
        $uri = http_build_query($array);
        $url = 'https://sts.aliyuncs.com/?'.$uri;
        $data=$this->curl_get($url); // 请求方式与获取sign签名一致 get
        $data=json_decode($data,true);
        $data['Credentials']['StatusCode'] = 200;
        exit(json_encode($data['Credentials']));die();
    }
    public function get_sign($params,$mothod='GET'){
        //获取签名
        ksort($params); //字典化排序
        $stringToSign=strtoupper($mothod).'&'.$this->percentEncode('/').'&';  //precentEncode规范化请求字符串↓
        $tmp = "";
        foreach ($params as $key => $val) {
            $tmp.='&'.$this->percentEncode($key).'='.$this->percentEncode($val);
        }
        $tmp=trim($tmp,'&');
        $stringToSign = $stringToSign.$this->percentEncode($tmp);
        $key="阿里云accesskeysecret".'&';  //阿里云accesskeysecret
        $hmac=base64_encode(hash_hmac("sha1",$stringToSign,$key,true));//hash_hmac — 使用 HMAC 方法生成带有密钥的哈希值
        return ['hmac'=>$hmac,'stringToSign'=>$stringToSign];
    }
    public function percentEncode($value = null)
    {
        $en = urlencode($value);
        $en = str_replace("+","%20",$en);
        $en = str_replace("*","%2A",$en);
        $en = str_replace("%7E","~",$en);
        return $en;
    }
    public function curl_get($url){

        $header = array(
            'Accept: application/json',
        );
        $curl = curl_init();
        //设置抓取的url
        curl_setopt($curl, CURLOPT_URL, $url);
        //设置头文件的信息作为数据流输出
        curl_setopt($curl, CURLOPT_HEADER, 0);
        // 超时设置,以秒为单位
        curl_setopt($curl, CURLOPT_TIMEOUT, 1);

        // 超时设置,以毫秒为单位
        // curl_setopt($curl, CURLOPT_TIMEOUT_MS, 500);

        // 设置请求头
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        //设置获取的信息以文件流的形式返回,而不是直接输出。
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        //执行命令
        $data = curl_exec($curl);

        // 显示错误信息
        if (curl_error($curl)) {
            print "Error: " . curl_error($curl);
        } else {
            // 打印返回的内容
            curl_close($curl);
            return $data;
        }
    }

注:这里的阿里云accesskeysecret 是角色创建的KEY
在这里插入图片描述

3.正确返回结果
在这里插入图片描述
如果后台返回数据没有问题 请查看前端的错误信息(以上的插件为原生的安卓和ios必须在原生的里面才能看到错误信息)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值