Home > Article > Backend Development > How to use oss web direct transmission in php
This article will introduce to you how to use oss web direct transmission in PHP. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.
Advantages of direct transmission: No need to go through the server, direct transmission from the front end to oss, thus reducing server bandwidth usage and speeding up user uploads speed.
What this article talks about does not require the installation of expansion packs. It only has direct transmission function, which is very lightweight.
I wrote it with reference to https://github.com/iiDestiny/flysystem-oss. If you need to use other oss functions in php, then An expansion pack would be more appropriate.
<?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 can be viewed at oss.

policy, pay attention to whether there are line breaks (I didn’t even notice...)
Recommended study: " PHP Video Tutorial》
The above is the detailed content of How to use oss web direct transmission in php. For more information, please follow other related articles on the PHP Chinese website!