阿里云OSS
本服务用于管理阿里云OSS
本服务是对阿里云SDK的封装,所以方法名与阿里的SDK一样,下面是列举出的几个使用方法,其他OSS方法都是可以使用的,请参考阿里云 OSS参考文档
PHP上传
配置
配置 | 查看 |
---|---|
endPoint | 登录某个块查看 bucket概览 |
accessId | 登录阿里云后台查看右上角的 "访问控制(使用子帐号)" 或 "accesskeys(使用主帐号)" |
accessKey | 同上 accessId |
Config::set('oss',[
'accessKeyId'=>'',
'accessKeySecret'=>'',
//外网Endpoint OSS开通Region和Endpoint对照表: https://help.aliyun.com/document_detail/31837.html
'endpoint'=>'oss-cn-hangzhou.aliyuncs.com',
//OSS块标识
'bucket'=> "houdunren"
]
);
字符串上传
$object = "hd.txt";
$content = "Hi, OSS.";
$res = Oss::putObject($object, $content);
if(isset($res['oss-request-url'])){
echo "文件:".$res['oss-request-url'];
}
上传本地文件
$object = '1-test-upload.jpg';
$filePath = 'tests/1.jpg';
$res = Oss::uploadFile($object, $filePath);
if(isset($res['oss-request-url'])){
echo "文件:".$res['oss-request-url'];
}
其他OSS管理
组件与官网SDK无缝集成,比如我们拿删除资源举例。
下面是官方删除对象代码 官网查看
$ossClient->deleteObject($bucket, $object);
本组件实现的删除方法
Oss::deleteObject('hdphp.php');
也就是说我们在组件中调用SDK提供的方法时,不需要传递第一个块名称。
前台直接上传
后台签名
format(\DateTime::ISO8601);
$pos = strpos($expiration, '+');
$expiration = substr($expiration, 0, $pos);
return $expiration."Z";
}
$now = time();
$expire = 30; //设置该policy超时时间是10s. 即这个policy过了这个有效时间,将不能访问
$end = $now + $expire;
$expiration = gmt_iso8601($end);
//最大文件大小.用户可以自己设置
$condition = [0 => 'content-length-range', 1 => 0, 2 => 1048576000];
$conditions[] = $condition;
//表示用户上传的数据,必须是以$dir开始, 不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录
$start = [0 => 'starts-with', 1 => '$key', 2 => $dir];
$conditions[] = $start;
$arr = ['expiration' => $expiration, 'conditions' => $conditions];
//return;
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));
$response = [];
$response['accessid'] = $id;
$response['host'] = $host;
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
//这个参数是设置用户上传指定的前缀
$response['dir'] = $dir;
return json_encode($response);
}
}
echo Oss::sign();
前台
OSS上传