UpyunService.php
4.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/**
* Created by PhpStorm.
* User: zhl
* Date: 2024/8/20
* Time: 11:01
*/
namespace App\Services;
class UpyunService
{
/**
* 刷新进度查询
* @param $task_id
* @return mixed
*/
public function purgePull($task_id)
{
$action = '/purge';
if (FALSE == is_array($task_id))
$task_id = [$task_id];
$task_ids = implode(',', $task_id);
$param = [
'task_ids' => $task_ids, // 需要查询进度的 task_id
];
list($status, $result) = $this->curlRequest($action, $param, 'GET', $this->getHeader());
return $result;
}
/**
* URL 刷新
* @param $url
* @return mixed
*/
public function purgePush($url)
{
$action = '/purge';
if (FALSE == is_array($url))
$url = [$url];
$urls = implode(PHP_EOL, $url);
$param = [
'bucket' => '',
'urls' => $urls, // 需要批量刷新的文件 URL,多个 URL 通过换行符分隔
];
list($status, $result) = $this->curlRequest($action, $param, 'POST', $this->getHeader());
return $result;
}
/**
* URL 预热
* @param $url
* @return mixed
*/
public function preheatPush($url)
{
$action = '/preheat';
if (FALSE == is_array($url))
$url = [$url];
$urls = implode(PHP_EOL, $url);
$param = [
'bucket' => '',
'urls' => $urls, // 需要批量刷新的文件 URL,多个 URL 通过换行符分隔
'range_bytes' => ''
];
list($status, $result) = $this->curlRequest($action, $param, 'POST', $this->getHeader());
return $result;
}
/**
* 头信息需要携带授权token
* @return array
*/
public function getHeader()
{
return [
'Authorization: Bearer ' . config('custom.upyun.token'),
];
}
/**
* @param $url
* @param $data
* @param string $method
* @param array $header
* @param int $time_out
* @return array
*/
public function curlRequest($url, $data, $method = 'POST', $header = [], $time_out = 60)
{
$url = config('custom.upyun.api_url') . $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, $time_out);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
if ($data)
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array_merge([
'Expect:',
'Content-type: application/json',
'Accept: application/json',
], $header)
);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return [$code, $response];
}
/**
* 创建token
* 该功能请不要重复使用
* 注意:出于安全考虑,token 只有在调用该接口创建时返回一次,后续无法再通过其他接口查询token值,调用该接口后,请务必记录token值
* {"access_token":"fe64817b-1f32-46f3-9ac3-a2993725708a","name":"v6-66c4333f60644","scope":"global","services":[],"created_at":1724134209,"expired_at":9999999999}
* @return mixed
*/
public function createToken()
{
$action = '/oauth/tokens';
$param = [
'username' => '', // 用户名
'password' => '', // 密码
'code' => md5(uniqid()), // 20-32位随机字符串,每次请求不能重复。只能包含数字、字母和中划线
'name' => 'v6-' . uniqid(), // token 备注名,长度 20 的字符串,不能和其他 token 重复
'scope' => 'global', // 权限 Valid Values:'global''bucket''operator''domain''cache''log''stats''oauth''security''srs'
// 'expired_at' => '', // integer token 过期时间的秒级时间戳,当该参数不设置时,表示永不过期
];
list($status, $result) = $this->curlRequest($action, $param);
return $result;
}
}