55 lines
1.7 KiB
PHP
55 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
class OssController extends BaseController
|
|
{
|
|
public function sign(Request $request)
|
|
{
|
|
// 账户要有 OSS bucket 的上传 putObject 权限
|
|
// OSS bucket 要开启跨域配置
|
|
// 阿里云 RAM access_key
|
|
$id = 'xxx';
|
|
// 阿里云 RAM access_secret
|
|
$key = 'xxx';
|
|
// OSS EndPoint, 完整域名
|
|
$host = 'https://owl-admin-starter.oss-cn-chengdu.aliyuncs.com';
|
|
// 访问域名, 推荐使用自定义域名
|
|
// 如果使用 EndPoint, 直接访问文件时, 会下载文件, 无法预览
|
|
$url = 'http://oss.abcdefg.fun';
|
|
// 文件上传目录, 以 / 结尾
|
|
$dir = $request->input('upload', 'upload/');
|
|
// 请求有效期(30秒), 超过时间将无法上传文件
|
|
$expire = 30;
|
|
$end = time() + $expire;
|
|
// 文件大小(1000MB), 超过将无法上传文件
|
|
$max = 1048576000;
|
|
$arr = [
|
|
'expiration' => str_replace('+00:00', '.000Z', gmdate('c', $end)),
|
|
'conditions' => [
|
|
['content-length-range', 0, $max],
|
|
['starts-with', '$key', $dir]
|
|
]
|
|
];
|
|
|
|
$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));
|
|
|
|
$data = [
|
|
'accessid' => $id,
|
|
'host' => $host,
|
|
'policy' => $base64_policy,
|
|
'signature' => $signature,
|
|
'expire' => $end,
|
|
'dir' => $dir,
|
|
'url' => $url,
|
|
];
|
|
|
|
return $this->json($data);
|
|
}
|
|
}
|