Passed
Branch master (7fc86c)
by xiaohui
04:06 queued 01:26
created
sdk/Utils/UploadPolicy.php 1 patch
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -5,47 +5,47 @@
 block discarded – undo
5 5
 
6 6
 class UploadPolicy
7 7
 {
8
-    /*如下属性是必须的[The following attributes are required]*/
9
-    public $namespace;                              // 多媒体服务的空间名[media namespace name]
10
-    public $bucket;                                 // OSS的空间名[media bucket name]
11
-    public $insertOnly;                             // 是否可覆盖[upload mode. it's not allowd uploading the same name files]
12
-    public $expiration;                             // 过期时间[expiration time, unix time, in milliseconds]
8
+	/*如下属性是必须的[The following attributes are required]*/
9
+	public $namespace;                              // 多媒体服务的空间名[media namespace name]
10
+	public $bucket;                                 // OSS的空间名[media bucket name]
11
+	public $insertOnly;                             // 是否可覆盖[upload mode. it's not allowd uploading the same name files]
12
+	public $expiration;                             // 过期时间[expiration time, unix time, in milliseconds]
13 13
 
14
-    /*如下属性是可选的[The following attributes are optional]*/
15
-    public $detectMime = Conf::DETECT_MIME_TRUE;                             // 是否进行类型检测[is auto detecte media file mime type, default is true]
16
-    public $dir;                                    // 路径[media file dir, magic vars and custom vars are supported]
17
-    public $name;                                   // 上传到服务端的文件名[media file name, magic vars and custom vars are supported]
18
-    public $sizeLimit;                              // 文件大小限制[upload size limited, in bytes]
19
-    public $mimeLimit;                              // 文件类型限制[upload mime type limited]
20
-    public $callbackUrl;                            // 回调URL [callback urls, ip address is recommended]
21
-    public $callbackHost;                           // 回调时Host [callback host]
22
-    public $callbackBody;                           // 回调时Body [callback body, magic vars and custom vars are supported]
23
-    public $callbackBodyType;                       // 回调时Body类型 [callback body type, default is 'application/x-www-form-urlencoded; charset=utf-8']
24
-    public $returnUrl;                              // 上传完成之后,303跳转的Url [return url, when return code is 303]
25
-    public $returnBody;                             // 上传完成返回体 [return body, magic vars and custom vars are supported]
26
-    public $mediaEncode;                            // 上传音视频时,可以指定转码策略[media encode policy after upload task has been completed. it's json string]
14
+	/*如下属性是可选的[The following attributes are optional]*/
15
+	public $detectMime = Conf::DETECT_MIME_TRUE;                             // 是否进行类型检测[is auto detecte media file mime type, default is true]
16
+	public $dir;                                    // 路径[media file dir, magic vars and custom vars are supported]
17
+	public $name;                                   // 上传到服务端的文件名[media file name, magic vars and custom vars are supported]
18
+	public $sizeLimit;                              // 文件大小限制[upload size limited, in bytes]
19
+	public $mimeLimit;                              // 文件类型限制[upload mime type limited]
20
+	public $callbackUrl;                            // 回调URL [callback urls, ip address is recommended]
21
+	public $callbackHost;                           // 回调时Host [callback host]
22
+	public $callbackBody;                           // 回调时Body [callback body, magic vars and custom vars are supported]
23
+	public $callbackBodyType;                       // 回调时Body类型 [callback body type, default is 'application/x-www-form-urlencoded; charset=utf-8']
24
+	public $returnUrl;                              // 上传完成之后,303跳转的Url [return url, when return code is 303]
25
+	public $returnBody;                             // 上传完成返回体 [return body, magic vars and custom vars are supported]
26
+	public $mediaEncode;                            // 上传音视频时,可以指定转码策略[media encode policy after upload task has been completed. it's json string]
27 27
 
28
-    public function __construct($option)
29
-    {
30
-        if (!isset($option['expiration']) || !$option['expiration']) {
31
-            $option['expiration'] = -1;
32
-        }
28
+	public function __construct($option)
29
+	{
30
+		if (!isset($option['expiration']) || !$option['expiration']) {
31
+			$option['expiration'] = -1;
32
+		}
33 33
 
34
-        foreach ($option as $attribute => $value) {
35
-            $this->{$attribute} = $value;
36
-        }
37
-    }
34
+		foreach ($option as $attribute => $value) {
35
+			$this->{$attribute} = $value;
36
+		}
37
+	}
38 38
 
39
-    public function toArray()
40
-    {
41
-        return (array) $this;
42
-        $array = [];
43
-        foreach ($this as $attribute => $value) {
44
-            if ($value !== null) {
45
-                $array[$attribute] = $value;
46
-            }
47
-        }
39
+	public function toArray()
40
+	{
41
+		return (array) $this;
42
+		$array = [];
43
+		foreach ($this as $attribute => $value) {
44
+			if ($value !== null) {
45
+				$array[$attribute] = $value;
46
+			}
47
+		}
48 48
 
49
-        return $array;
50
-    }
49
+		return $array;
50
+	}
51 51
 }
Please login to merge, or discard this patch.
sdk/Conf/Conf.php 1 patch
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -3,39 +3,39 @@
 block discarded – undo
3 3
 
4 4
 class Conf
5 5
 {
6
-    const CHARSET = "UTF-8";
7
-    const SDK_VERSION = '2.0.3';
6
+	const CHARSET = "UTF-8";
7
+	const SDK_VERSION = '2.0.3';
8 8
 
9
-    const UPLOAD_HOST_MEDIA = "https://upload.media.aliyun.com";        //文件上传的地址
10
-    const MANAGE_HOST_MEDIA = "https://rs.media.aliyun.com";            //服务管理的地址
11
-    const MANAGE_API_VERSION = "3.0";        //资源管理接口版本
12
-    const SCAN_PORN_VERSION = "3.1";        //黄图扫描接口版本
13
-    const MEDIA_ENCODE_VERSION = "3.0";        //媒体转码接口版本
9
+	const UPLOAD_HOST_MEDIA = "https://upload.media.aliyun.com";        //文件上传的地址
10
+	const MANAGE_HOST_MEDIA = "https://rs.media.aliyun.com";            //服务管理的地址
11
+	const MANAGE_API_VERSION = "3.0";        //资源管理接口版本
12
+	const SCAN_PORN_VERSION = "3.1";        //黄图扫描接口版本
13
+	const MEDIA_ENCODE_VERSION = "3.0";        //媒体转码接口版本
14 14
 
15
-    const UPLOAD_API_UPLOAD = "/api/proxy/upload";
16
-    const UPLOAD_API_BLOCK_INIT = "/api/proxy/blockInit";
17
-    const UPLOAD_API_BLOCK_UPLOAD = "/api/proxy/blockUpload";
18
-    const UPLOAD_API_BLOCK_COMPLETE = "/api/proxy/blockComplete";
19
-    const UPLOAD_API_BLOCK_CANCEL = "/api/proxy/blockCancel";
15
+	const UPLOAD_API_UPLOAD = "/api/proxy/upload";
16
+	const UPLOAD_API_BLOCK_INIT = "/api/proxy/blockInit";
17
+	const UPLOAD_API_BLOCK_UPLOAD = "/api/proxy/blockUpload";
18
+	const UPLOAD_API_BLOCK_COMPLETE = "/api/proxy/blockComplete";
19
+	const UPLOAD_API_BLOCK_CANCEL = "/api/proxy/blockCancel";
20 20
 
21
-    const TYPE_TOP = "TOP";
22
-    const TYPE_CLOUD = "CLOUD";
21
+	const TYPE_TOP = "TOP";
22
+	const TYPE_CLOUD = "CLOUD";
23 23
 
24
-    const DETECT_MIME_TRUE = 1;            //检测MimeType
25
-    const DETECT_MIME_NONE = 0;            //不检测MimeType
26
-    const INSERT_ONLY_TRUE = 1;            //文件上传不可覆盖
27
-    const INSERT_ONLY_NONE = 0;            //文件上传可覆盖
24
+	const DETECT_MIME_TRUE = 1;            //检测MimeType
25
+	const DETECT_MIME_NONE = 0;            //不检测MimeType
26
+	const INSERT_ONLY_TRUE = 1;            //文件上传不可覆盖
27
+	const INSERT_ONLY_NONE = 0;            //文件上传可覆盖
28 28
 
29
-    const MIN_OBJ_SIZE = 102400;        //1024*100;
30
-    const HTTP_TIMEOUT = 30;            //http的超时时间:30s
31
-    const HTTP_RETRY = 1;                //http失败后重试:1
29
+	const MIN_OBJ_SIZE = 102400;        //1024*100;
30
+	const HTTP_TIMEOUT = 30;            //http的超时时间:30s
31
+	const HTTP_RETRY = 1;                //http失败后重试:1
32 32
 
33
-    const BLOCK_MIN_SIZE = 102400;        //文件分片最小值:1024*100; 100K
34
-    const BLOCK_DEFF_SIZE = 2097152;    //文件分片默认值:1024*1024*2; 2M
35
-    const BLOCK_MAX_SIZE = 10485760;    //文件分片最大值:1024*1024*10; 10M
33
+	const BLOCK_MIN_SIZE = 102400;        //文件分片最小值:1024*100; 100K
34
+	const BLOCK_DEFF_SIZE = 2097152;    //文件分片默认值:1024*1024*2; 2M
35
+	const BLOCK_MAX_SIZE = 10485760;    //文件分片最大值:1024*1024*10; 10M
36 36
 
37
-    const CURL_ERR_LOG = "curl_error.log";    //curl请求时的错误日志信息
37
+	const CURL_ERR_LOG = "curl_error.log";    //curl请求时的错误日志信息
38 38
 
39
-    const RUN_LEVEL_RELEASE = 1;        //release级别
40
-    const RUN_LEVEL_DEBUG = 2;            //debug级别
39
+	const RUN_LEVEL_RELEASE = 1;        //release级别
40
+	const RUN_LEVEL_DEBUG = 2;            //debug级别
41 41
 }
Please login to merge, or discard this patch.
src/WantuFileServiceProvider.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -10,22 +10,22 @@
 block discarded – undo
10 10
 
11 11
 class WantuFileServiceProvider extends ServiceProvider
12 12
 {
13
-    public function boot()
14
-    {
15
-        app('filesystem')->extend('wantu', function ($app, $config) {
16
-            $adapter = new WantuFileAdapter(
17
-                $config['access_key'],
18
-                $config['secret_key'],
19
-                $config['namespace'],
20
-                $config['domain']
21
-            );
22
-            $flysystem = new Filesystem($adapter, new Config(['disable_asserts' => true]));
23
-            // $flysystem->addPlugin(new FetchFile());
24
-            $flysystem->addPlugin(new UploadToken());
25
-            $flysystem->addPlugin(new GetUrl());
26
-            // $flysystem->addPlugin(new PrivateDownloadUrl());
27
-            // $flysystem->addPlugin(new RefreshFile());
28
-            return $flysystem;
29
-        });
30
-    }
13
+	public function boot()
14
+	{
15
+		app('filesystem')->extend('wantu', function ($app, $config) {
16
+			$adapter = new WantuFileAdapter(
17
+				$config['access_key'],
18
+				$config['secret_key'],
19
+				$config['namespace'],
20
+				$config['domain']
21
+			);
22
+			$flysystem = new Filesystem($adapter, new Config(['disable_asserts' => true]));
23
+			// $flysystem->addPlugin(new FetchFile());
24
+			$flysystem->addPlugin(new UploadToken());
25
+			$flysystem->addPlugin(new GetUrl());
26
+			// $flysystem->addPlugin(new PrivateDownloadUrl());
27
+			// $flysystem->addPlugin(new RefreshFile());
28
+			return $flysystem;
29
+		});
30
+	}
31 31
 }
Please login to merge, or discard this patch.
src/Plugins/UploadToken.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -5,13 +5,13 @@
 block discarded – undo
5 5
 
6 6
 class UploadToken extends AbstractPlugin
7 7
 {
8
-    public function getMethod()
9
-    {
10
-        return 'getUploadToken';
11
-    }
8
+	public function getMethod()
9
+	{
10
+		return 'getUploadToken';
11
+	}
12 12
 
13
-    public function handle($option = null)
14
-    {
15
-        return $this->filesystem->getAdapter()->getUploadToken($option);
16
-    }
13
+	public function handle($option = null)
14
+	{
15
+		return $this->filesystem->getAdapter()->getUploadToken($option);
16
+	}
17 17
 }
Please login to merge, or discard this patch.
src/Plugins/GetUrl.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -5,12 +5,12 @@
 block discarded – undo
5 5
 
6 6
 class GetUrl extends AbstractPlugin
7 7
 {
8
-    public function getMethod()
9
-    {
10
-        return 'getUrl';
11
-    }
12
-    public function handle($path)
13
-    {
14
-        return $this->filesystem->getAdapter()->getUrl($path);
15
-    }
8
+	public function getMethod()
9
+	{
10
+		return 'getUrl';
11
+	}
12
+	public function handle($path)
13
+	{
14
+		return $this->filesystem->getAdapter()->getUrl($path);
15
+	}
16 16
 }
Please login to merge, or discard this patch.
src/WantuFileAdapter.php 1 patch
Indentation   +393 added lines, -393 removed lines patch added patch discarded remove patch
@@ -12,397 +12,397 @@
 block discarded – undo
12 12
 
13 13
 class WantuFileAdapter extends AbstractAdapter
14 14
 {
15
-    use NotSupportingVisibilityTrait;
16
-
17
-    /**
18
-     * @var Client|null
19
-     */
20
-    private $client = null;
21
-
22
-    /**
23
-     * @var string
24
-     */
25
-    private $namespace = null;
26
-
27
-    /**
28
-     * @var string
29
-     */
30
-    private $domain = null;
31
-
32
-    /**
33
-     * @param string $accessKey
34
-     * @param string $secretKey
35
-     * @param string $namespace
36
-     */
37
-    public function __construct($accessKey, $secretKey, $namespace, $origin)
38
-    {
39
-        $client = new Client($accessKey, $secretKey, $namespace);
40
-        $this->setClient($client, $namespace, $origin);
41
-    }
42
-
43
-    public function setClient(Client $client, $namespace, $origin)
44
-    {
45
-        $this->client = $client;
46
-        $this->namespace = $namespace;
47
-        $this->domain = $origin;
48
-    }
49
-
50
-    /**
51
-     * Write a new file.
52
-     *
53
-     * @param string $path
54
-     * @param string $contents
55
-     * @param Config $config   Config object
56
-     *
57
-     * @return array|false false on failure file meta data on success
58
-     */
59
-    public function write($path, $contents, Config $config)
60
-    {
61
-        $uploadPolicy = new UploadPolicy([
62
-            'namespace' => $this->namespace,
63
-            'dir' => preg_replace('/^\./', '', dirname($path)),
64
-            'name' => last(explode("/", $path)),
65
-        ]);
66
-
67
-        return $this->client->uploadData($contents, $uploadPolicy);
68
-    }
69
-
70
-    /**
71
-     * Write a new file using a stream.
72
-     *
73
-     * @param string   $path
74
-     * @param resource $resource
75
-     * @param Config   $config   Config object
76
-     *
77
-     * @return array|false false on failure file meta data on success
78
-     */
79
-    public function writeStream($path, $resource, Config $config)
80
-    {
81
-        $contents = '';
82
-
83
-        while (!feof($resource)) {
84
-            $contents .= fread($resource, 1024);
85
-        }
86
-
87
-        $response = $this->write($path, $contents, $config);
88
-
89
-        if (false === $response) {
90
-            return $response;
91
-        }
92
-
93
-        return compact('path');
94
-    }
95
-
96
-    /**
97
-     * Update a file.
98
-     *
99
-     * @param string $path
100
-     * @param string $contents
101
-     * @param Config $config   Config object
102
-     *
103
-     * @return array|false false on failure file meta data on success
104
-     */
105
-    public function update($path, $contents, Config $config)
106
-    {
107
-        $this->delete($path);
108
-
109
-        return $this->write($path, $contents, $config);
110
-    }
111
-
112
-    /**
113
-     * Update a file using a stream.
114
-     *
115
-     * @param string   $path
116
-     * @param resource $resource
117
-     * @param Config   $config   Config object
118
-     *
119
-     * @return array|false false on failure file meta data on success
120
-     */
121
-    public function updateStream($path, $resource, Config $config)
122
-    {
123
-        $this->delete($path);
124
-
125
-        return $this->writeStream($path, $resource, $config);
126
-    }
127
-
128
-    public function put($path, $contents, Config $config)
129
-    {
130
-        return $this->write($path, $contents, $config);
131
-    }
132
-
133
-    public function putStream($path, $resource, Config $config)
134
-    {
135
-        return $this->write($path, $resource, $config);
136
-    }
137
-
138
-    /**
139
-     * Rename a file.
140
-     *
141
-     * @param string $path
142
-     * @param string $newpath
143
-     *
144
-     * @return bool
145
-     */
146
-    public function rename($path, $newpath)
147
-    {
148
-        return $this->client->renameFile($this->namespace, preg_replace('/^\./', '', dirname($path)), last(explode("/", $path)), preg_replace('/^\./', '', dirname($newpath)), last(explode("/", $newpath)));
149
-    }
150
-
151
-    /**
152
-     * Copy a file.
153
-     *
154
-     * @param string $path
155
-     * @param string $newpath
156
-     *
157
-     * @return bool
158
-     */
159
-    public function copy($path, $newpath)
160
-    {
161
-    }
162
-
163
-    /**
164
-     * Delete a file.
165
-     *
166
-     * @param string $path
167
-     *
168
-     * @return bool
169
-     */
170
-    public function delete($path)
171
-    {
172
-        return $this->client->deleteFile($this->namespace, preg_replace('/^\./', '', dirname($path)), last(explode("/", $path)));
173
-    }
174
-
175
-    /**
176
-     * Delete a directory.
177
-     *
178
-     * @param string $dirname
179
-     *
180
-     * @return bool
181
-     */
182
-    public function deleteDir($dirname)
183
-    {
184
-        return $this->client->deleteDir($this->namespace, $dirname);
185
-    }
186
-
187
-    /**
188
-     * Create a directory.
189
-     *
190
-     * @param string $dirname directory name
191
-     * @param Config $config
192
-     *
193
-     * @return array|false
194
-     */
195
-    public function createDir($dirname, Config $config)
196
-    {
197
-        return $this->client->createDir($this->namespace, $dirname);
198
-    }
199
-
200
-    /**
201
-     * Check whether a file exists.
202
-     *
203
-     * @param string $path
204
-     *
205
-     * @return array|bool|null
206
-     */
207
-    public function has($path)
208
-    {
209
-        if (Str::endsWith($path, "/")) {
210
-            return $this->client->existsFolder($this->namespace,  preg_replace('/^\./' , '', dirname( $path)));
211
-        } else {
212
-            return $this->client->existsFile($this->namespace, preg_replace('/^\./', '', dirname($path)), last(explode("/", $path)));
213
-        }
214
-    }
215
-
216
-
217
-    /**
218
-     * Read a file.
219
-     *
220
-     * @param string $path
221
-     *
222
-     * @return array|false
223
-     */
224
-    public function read($path)
225
-    {
226
-        $contents = file_get_contents($this->getUrl($path));
227
-        return compact('contents', 'path');
228
-    }
229
-
230
-    /**
231
-     * Read a file as a stream.
232
-     *
233
-     * @param string $path
234
-     *
235
-     * @return array|false
236
-     */
237
-    public function readStream($path)
238
-    {
239
-    }
240
-
241
-    /**
242
-     * List contents of a directory.
243
-     *
244
-     * @param string $directory
245
-     * @param bool   $recursive
246
-     *
247
-     * @return array
248
-     */
249
-    public function listContents($directory = '', $recursive = false)
250
-    {
251
-        return $this->client->listFiles($this->namespace, $directory, 1, 1000);
252
-    }
253
-
254
-    /**
255
-     * Get all the meta data of a file or directory.
256
-     *
257
-     * @param string $path
258
-     *
259
-     * @return array|false
260
-     */
261
-    public function getMetadata($path)
262
-    {
263
-        return $this->client->getFileInfo($this->namespace, preg_replace('/^\./', '', dirname($path)), last(explode("/", $path)));
264
-    }
265
-
266
-    /**
267
-     * Get the size of a file.
268
-     *
269
-     * @param string $path
270
-     *
271
-     * @return array|false
272
-     */
273
-    public function getSize($path)
274
-    {
275
-    }
276
-
277
-
278
-    /**
279
-     * Fetch url to bucket.
280
-     *
281
-     * @param string $path
282
-     * @param string $url
283
-     *
284
-     * @return array|false
285
-     */
286
-    public function fetch($path, $url)
287
-    {
288
-    }
289
-
290
-    /**
291
-     * Get private file download url.
292
-     *
293
-     * @param string $path
294
-     * @param int    $expires
295
-     *
296
-     * @return string
297
-     */
298
-    public function privateDownloadUrl($path, $expires = 3600)
299
-    {
300
-    }
301
-
302
-    /**
303
-     * Refresh file cache.
304
-     *
305
-     * @param string|array $path
306
-     *
307
-     * @return array
308
-     */
309
-    public function refresh($path)
310
-    {
311
-    }
312
-
313
-
314
-    /**
315
-     * Get the mime-type of a file.
316
-     *
317
-     * @param string $path
318
-     *
319
-     * @return array|false
320
-     */
321
-    public function getMimeType($path)
322
-    {
323
-    }
324
-
325
-
326
-    /**
327
-     * Get the timestamp of a file.
328
-     *
329
-     * @param string $path
330
-     *
331
-     * @return array|false
332
-     */
333
-    public function getTimestamp($path)
334
-    {
335
-    }
336
-
337
-    /**
338
-     * @return string
339
-     */
340
-    public function getBucket()
341
-    {
342
-        return $this->bucket;
343
-    }
344
-
345
-    /**
346
-     * Get the upload token.
347
-     *
348
-     * @param string|null $key
349
-     * @param int         $ttl
350
-     * @param string|null $policy
351
-     * @param string|null $strictPolice
352
-     *
353
-     * @return string
354
-     */
355
-    public function getUploadToken($option = null)
356
-    {
357
-        if ($option === null) {
358
-            $option = ['name' => null, 'ttl' => 3600, ];
359
-        } else if (!isset($option['ttl']) || !$option['ttl']) {
360
-            $option['ttl'] = 3600;
361
-        }
362
-
363
-        return $this->client->getUploadToken(collect([
364
-            'expiration' => Carbon::now()->addSeconds($option['ttl'])->timestamp * 1000,
365
-            'insertOnly' => Conf::INSERT_ONLY_TRUE
366
-        ])->merge(collect($option)->except(['ttl',])));
367
-    }
368
-
369
-    /**
370
-     * @param array $stats
371
-     *
372
-     * @return array
373
-     */
374
-    protected function normalizeFileInfo(array $stats)
375
-    {
376
-        return [
377
-            'type' => 'file',
378
-            'path' => $stats['key'],
379
-            'timestamp' => floor($stats['putTime'] / 10000000),
380
-            'size' => $stats['fsize'],
381
-        ];
382
-    }
383
-
384
-    /**
385
-     * Get resource url.
386
-     *
387
-     * @param string $path
388
-     *
389
-     * @return string
390
-     */
391
-    public function getUrl($path)
392
-    {
393
-        return $this->normalizeHost($this->domain) . ltrim($path, '/');
394
-    }
395
-
396
-    /**
397
-     * @param string $domain
398
-     *
399
-     * @return string
400
-     */
401
-    protected function normalizeHost($domain)
402
-    {
403
-        if (0 !== stripos($domain, 'https://') && 0 !== stripos($domain, 'http://')) {
404
-            $domain = "http://{$domain}";
405
-        }
406
-        return rtrim($domain, '/') . '/';
407
-    }
15
+	use NotSupportingVisibilityTrait;
16
+
17
+	/**
18
+	 * @var Client|null
19
+	 */
20
+	private $client = null;
21
+
22
+	/**
23
+	 * @var string
24
+	 */
25
+	private $namespace = null;
26
+
27
+	/**
28
+	 * @var string
29
+	 */
30
+	private $domain = null;
31
+
32
+	/**
33
+	 * @param string $accessKey
34
+	 * @param string $secretKey
35
+	 * @param string $namespace
36
+	 */
37
+	public function __construct($accessKey, $secretKey, $namespace, $origin)
38
+	{
39
+		$client = new Client($accessKey, $secretKey, $namespace);
40
+		$this->setClient($client, $namespace, $origin);
41
+	}
42
+
43
+	public function setClient(Client $client, $namespace, $origin)
44
+	{
45
+		$this->client = $client;
46
+		$this->namespace = $namespace;
47
+		$this->domain = $origin;
48
+	}
49
+
50
+	/**
51
+	 * Write a new file.
52
+	 *
53
+	 * @param string $path
54
+	 * @param string $contents
55
+	 * @param Config $config   Config object
56
+	 *
57
+	 * @return array|false false on failure file meta data on success
58
+	 */
59
+	public function write($path, $contents, Config $config)
60
+	{
61
+		$uploadPolicy = new UploadPolicy([
62
+			'namespace' => $this->namespace,
63
+			'dir' => preg_replace('/^\./', '', dirname($path)),
64
+			'name' => last(explode("/", $path)),
65
+		]);
66
+
67
+		return $this->client->uploadData($contents, $uploadPolicy);
68
+	}
69
+
70
+	/**
71
+	 * Write a new file using a stream.
72
+	 *
73
+	 * @param string   $path
74
+	 * @param resource $resource
75
+	 * @param Config   $config   Config object
76
+	 *
77
+	 * @return array|false false on failure file meta data on success
78
+	 */
79
+	public function writeStream($path, $resource, Config $config)
80
+	{
81
+		$contents = '';
82
+
83
+		while (!feof($resource)) {
84
+			$contents .= fread($resource, 1024);
85
+		}
86
+
87
+		$response = $this->write($path, $contents, $config);
88
+
89
+		if (false === $response) {
90
+			return $response;
91
+		}
92
+
93
+		return compact('path');
94
+	}
95
+
96
+	/**
97
+	 * Update a file.
98
+	 *
99
+	 * @param string $path
100
+	 * @param string $contents
101
+	 * @param Config $config   Config object
102
+	 *
103
+	 * @return array|false false on failure file meta data on success
104
+	 */
105
+	public function update($path, $contents, Config $config)
106
+	{
107
+		$this->delete($path);
108
+
109
+		return $this->write($path, $contents, $config);
110
+	}
111
+
112
+	/**
113
+	 * Update a file using a stream.
114
+	 *
115
+	 * @param string   $path
116
+	 * @param resource $resource
117
+	 * @param Config   $config   Config object
118
+	 *
119
+	 * @return array|false false on failure file meta data on success
120
+	 */
121
+	public function updateStream($path, $resource, Config $config)
122
+	{
123
+		$this->delete($path);
124
+
125
+		return $this->writeStream($path, $resource, $config);
126
+	}
127
+
128
+	public function put($path, $contents, Config $config)
129
+	{
130
+		return $this->write($path, $contents, $config);
131
+	}
132
+
133
+	public function putStream($path, $resource, Config $config)
134
+	{
135
+		return $this->write($path, $resource, $config);
136
+	}
137
+
138
+	/**
139
+	 * Rename a file.
140
+	 *
141
+	 * @param string $path
142
+	 * @param string $newpath
143
+	 *
144
+	 * @return bool
145
+	 */
146
+	public function rename($path, $newpath)
147
+	{
148
+		return $this->client->renameFile($this->namespace, preg_replace('/^\./', '', dirname($path)), last(explode("/", $path)), preg_replace('/^\./', '', dirname($newpath)), last(explode("/", $newpath)));
149
+	}
150
+
151
+	/**
152
+	 * Copy a file.
153
+	 *
154
+	 * @param string $path
155
+	 * @param string $newpath
156
+	 *
157
+	 * @return bool
158
+	 */
159
+	public function copy($path, $newpath)
160
+	{
161
+	}
162
+
163
+	/**
164
+	 * Delete a file.
165
+	 *
166
+	 * @param string $path
167
+	 *
168
+	 * @return bool
169
+	 */
170
+	public function delete($path)
171
+	{
172
+		return $this->client->deleteFile($this->namespace, preg_replace('/^\./', '', dirname($path)), last(explode("/", $path)));
173
+	}
174
+
175
+	/**
176
+	 * Delete a directory.
177
+	 *
178
+	 * @param string $dirname
179
+	 *
180
+	 * @return bool
181
+	 */
182
+	public function deleteDir($dirname)
183
+	{
184
+		return $this->client->deleteDir($this->namespace, $dirname);
185
+	}
186
+
187
+	/**
188
+	 * Create a directory.
189
+	 *
190
+	 * @param string $dirname directory name
191
+	 * @param Config $config
192
+	 *
193
+	 * @return array|false
194
+	 */
195
+	public function createDir($dirname, Config $config)
196
+	{
197
+		return $this->client->createDir($this->namespace, $dirname);
198
+	}
199
+
200
+	/**
201
+	 * Check whether a file exists.
202
+	 *
203
+	 * @param string $path
204
+	 *
205
+	 * @return array|bool|null
206
+	 */
207
+	public function has($path)
208
+	{
209
+		if (Str::endsWith($path, "/")) {
210
+			return $this->client->existsFolder($this->namespace,  preg_replace('/^\./' , '', dirname( $path)));
211
+		} else {
212
+			return $this->client->existsFile($this->namespace, preg_replace('/^\./', '', dirname($path)), last(explode("/", $path)));
213
+		}
214
+	}
215
+
216
+
217
+	/**
218
+	 * Read a file.
219
+	 *
220
+	 * @param string $path
221
+	 *
222
+	 * @return array|false
223
+	 */
224
+	public function read($path)
225
+	{
226
+		$contents = file_get_contents($this->getUrl($path));
227
+		return compact('contents', 'path');
228
+	}
229
+
230
+	/**
231
+	 * Read a file as a stream.
232
+	 *
233
+	 * @param string $path
234
+	 *
235
+	 * @return array|false
236
+	 */
237
+	public function readStream($path)
238
+	{
239
+	}
240
+
241
+	/**
242
+	 * List contents of a directory.
243
+	 *
244
+	 * @param string $directory
245
+	 * @param bool   $recursive
246
+	 *
247
+	 * @return array
248
+	 */
249
+	public function listContents($directory = '', $recursive = false)
250
+	{
251
+		return $this->client->listFiles($this->namespace, $directory, 1, 1000);
252
+	}
253
+
254
+	/**
255
+	 * Get all the meta data of a file or directory.
256
+	 *
257
+	 * @param string $path
258
+	 *
259
+	 * @return array|false
260
+	 */
261
+	public function getMetadata($path)
262
+	{
263
+		return $this->client->getFileInfo($this->namespace, preg_replace('/^\./', '', dirname($path)), last(explode("/", $path)));
264
+	}
265
+
266
+	/**
267
+	 * Get the size of a file.
268
+	 *
269
+	 * @param string $path
270
+	 *
271
+	 * @return array|false
272
+	 */
273
+	public function getSize($path)
274
+	{
275
+	}
276
+
277
+
278
+	/**
279
+	 * Fetch url to bucket.
280
+	 *
281
+	 * @param string $path
282
+	 * @param string $url
283
+	 *
284
+	 * @return array|false
285
+	 */
286
+	public function fetch($path, $url)
287
+	{
288
+	}
289
+
290
+	/**
291
+	 * Get private file download url.
292
+	 *
293
+	 * @param string $path
294
+	 * @param int    $expires
295
+	 *
296
+	 * @return string
297
+	 */
298
+	public function privateDownloadUrl($path, $expires = 3600)
299
+	{
300
+	}
301
+
302
+	/**
303
+	 * Refresh file cache.
304
+	 *
305
+	 * @param string|array $path
306
+	 *
307
+	 * @return array
308
+	 */
309
+	public function refresh($path)
310
+	{
311
+	}
312
+
313
+
314
+	/**
315
+	 * Get the mime-type of a file.
316
+	 *
317
+	 * @param string $path
318
+	 *
319
+	 * @return array|false
320
+	 */
321
+	public function getMimeType($path)
322
+	{
323
+	}
324
+
325
+
326
+	/**
327
+	 * Get the timestamp of a file.
328
+	 *
329
+	 * @param string $path
330
+	 *
331
+	 * @return array|false
332
+	 */
333
+	public function getTimestamp($path)
334
+	{
335
+	}
336
+
337
+	/**
338
+	 * @return string
339
+	 */
340
+	public function getBucket()
341
+	{
342
+		return $this->bucket;
343
+	}
344
+
345
+	/**
346
+	 * Get the upload token.
347
+	 *
348
+	 * @param string|null $key
349
+	 * @param int         $ttl
350
+	 * @param string|null $policy
351
+	 * @param string|null $strictPolice
352
+	 *
353
+	 * @return string
354
+	 */
355
+	public function getUploadToken($option = null)
356
+	{
357
+		if ($option === null) {
358
+			$option = ['name' => null, 'ttl' => 3600, ];
359
+		} else if (!isset($option['ttl']) || !$option['ttl']) {
360
+			$option['ttl'] = 3600;
361
+		}
362
+
363
+		return $this->client->getUploadToken(collect([
364
+			'expiration' => Carbon::now()->addSeconds($option['ttl'])->timestamp * 1000,
365
+			'insertOnly' => Conf::INSERT_ONLY_TRUE
366
+		])->merge(collect($option)->except(['ttl',])));
367
+	}
368
+
369
+	/**
370
+	 * @param array $stats
371
+	 *
372
+	 * @return array
373
+	 */
374
+	protected function normalizeFileInfo(array $stats)
375
+	{
376
+		return [
377
+			'type' => 'file',
378
+			'path' => $stats['key'],
379
+			'timestamp' => floor($stats['putTime'] / 10000000),
380
+			'size' => $stats['fsize'],
381
+		];
382
+	}
383
+
384
+	/**
385
+	 * Get resource url.
386
+	 *
387
+	 * @param string $path
388
+	 *
389
+	 * @return string
390
+	 */
391
+	public function getUrl($path)
392
+	{
393
+		return $this->normalizeHost($this->domain) . ltrim($path, '/');
394
+	}
395
+
396
+	/**
397
+	 * @param string $domain
398
+	 *
399
+	 * @return string
400
+	 */
401
+	protected function normalizeHost($domain)
402
+	{
403
+		if (0 !== stripos($domain, 'https://') && 0 !== stripos($domain, 'http://')) {
404
+			$domain = "http://{$domain}";
405
+		}
406
+		return rtrim($domain, '/') . '/';
407
+	}
408 408
 }
Please login to merge, or discard this patch.