功能介绍
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必须在原生的里面才能看到错误信息)