时间:2021-07-01 10:21:17 帮助过:2人阅读
直传优点: 无需经过服务器,由前端直传到 oss
,因此可以减少服务器带宽使用 和 加快用户上传速度。
本篇讲的这个不需要安装扩展包,仅有直传功能,是非常轻量的。
我是参考https://github.com/iiDestiny/flysystem-oss来写的,如果你需要在 php
使用其他的 oss
功能,那么扩展包更合适。
- <?php
- namespace Service;class OssUploadSignature{
- private $accessKeyId;
- private $accessKeySecret;
- private $expire = 300; // 5分钟有效期
- private $bucketHost; // Bucket 域名
- private $conditions = [ // 限制
- [
- 'content-length-range', // 内容限制
- 0, // 最小上传
- 10 * 1024 * 1024 // 最大上传10m
- ], [
- 0 => 'starts-with',
- 1 => '$key', // 必须带key
- 2 => 'images/', // 如:/images 只能放在/images的路径
- ]
- ];
- public function setBucketHost($bucketHost)
- {
- $this->bucketHost = $bucketHost;
- return $this;
- }
- public function setAccessKeyId($accessKeyId)
- {
- $this->accessKeyId = $accessKeyId;
- return $this;
- }
- public function setAccessKeySecret($accessKeySecret)
- {
- $this->accessKeySecret = $accessKeySecret;
- return $this;
- }
- public function signatureConfig()
- {
- $end = time() + $this->expire;
- $arr = [
- 'expiration' => $this->gmt_iso8601($end),
- 'conditions' => $this->conditions,
- ];
- $base64Policy = base64_encode(
- json_encode($arr)
- );
- $signature = base64_encode(hash_hmac('sha1', $base64Policy, $this->accessKeySecret, true));
- return [
- 'OSSAccessKeyId' => $this->accessKeyId,
- 'policy' => $base64Policy,
- 'signature' => $signature,
- 'expire' => $end,
- 'bucketHost' => $this->bucketHost ];
- }
- // fix bug https://connect.console.aliyun.com/connect/detail/162632
- public function gmt_iso8601($time)
- {
- return (new \DateTime(null, new \DateTimeZone('UTC')))->setTimestamp($time)->format('Y-m-d\TH:i:s\Z');
- }}
bucketHost
可以在 oss
查看。
复制 policy
的时候 注意是否有换行符(我都没注意…)
推荐学习:《PHP视频教程》
以上就是php怎么使用oss web直传的详细内容,更多请关注gxlcms其它相关文章!