Skip to content

Commit 63fa2b6

Browse files
committed
refactor: Adapter
1 parent ffbddb1 commit 63fa2b6

File tree

7 files changed

+136
-102
lines changed

7 files changed

+136
-102
lines changed

README-CN.md

Lines changed: 49 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,20 @@ Laravel 的阿里云对象存储 Storage 扩展
3333
3434
3. (可选) 修改文件配置 `config/filesystems.php`
3535
```
36-
'default' => env('FILESYSTEM_DRIVER', 'aliyun'),
36+
"default" => env("FILESYSTEM_DRIVER", "aliyun"),
3737
// ...
38-
'disks'=>[
38+
"disks"=>[
3939
// ...
40-
'aliyun' => [
41-
'driver' => 'aliyun',
42-
'access_id' => env('ALIYUN_OSS_ACCESS_ID'), // AccessKey ID, For example: LTAI4**************qgcsA
43-
'access_key' => env('ALIYUN_OSS_ACCESS_KEY'), // AccessKey Secret, For example: PkT4F********************Bl9or
44-
'bucket' => env('ALIYUN_OSS_BUCKET'), // For example: my-storage
45-
'endpoint' => env('ALIYUN_OSS_ENDPOINT'), // For example: oss-cn-shanghai.aliyuncs.com
46-
'internal' => env('ALIYUN_OSS_INTERNAL', null), // For example: oss-cn-shanghai-internal.aliyuncs.com
47-
'domain' => env('ALIYUN_OSS_DOMAIN', null), // For example: oss.my-domain.com
48-
'use_ssl' => env('ALIYUN_OSS_USE_SSL', false), // Whether to use https
49-
'prefix' => env('ALIYUN_OSS_PREFIX', null), // The prefix of the store path
40+
"aliyun" => [
41+
"driver" => "aliyun",
42+
"access_id" => env("ALIYUN_OSS_ACCESS_ID"), // AccessKey ID, For example: LTAI4**************qgcsA
43+
"access_key" => env("ALIYUN_OSS_ACCESS_KEY"), // AccessKey Secret, For example: PkT4F********************Bl9or
44+
"bucket" => env("ALIYUN_OSS_BUCKET"), // For example: my-storage
45+
"endpoint" => env("ALIYUN_OSS_ENDPOINT"), // For example: oss-cn-shanghai.aliyuncs.com
46+
"internal" => env("ALIYUN_OSS_INTERNAL", null), // For example: oss-cn-shanghai-internal.aliyuncs.com
47+
"domain" => env("ALIYUN_OSS_DOMAIN", null), // For example: oss.my-domain.com
48+
"use_ssl" => env("ALIYUN_OSS_USE_SSL", false), // Whether to use https
49+
"prefix" => env("ALIYUN_OSS_PREFIX", null), // The prefix of the store path
5050
],
5151
// ...
5252
]
@@ -55,75 +55,79 @@ Laravel 的阿里云对象存储 Storage 扩展
5555
## 快速使用
5656
```php
5757
use Illuminate\Support\Facades\Storage;
58-
$storage = Storage::disk('aliyun');
58+
$storage = Storage::disk("aliyun");
5959
```
6060
#### 写入
6161
```php
62-
Storage::disk('aliyun')->putFile('dir/path', '/local/path/file.txt');
63-
Storage::disk('aliyun')->putFileAs('dir/path', '/local/path/file.txt', 'file.txt');
62+
Storage::disk("aliyun")->putFile("dir/path", "/local/path/file.txt");
63+
Storage::disk("aliyun")->putFileAs("dir/path", "/local/path/file.txt", "file.txt");
6464

65-
Storage::disk('aliyun')->put('dir/path/file.txt', file_get_contents('/local/path/file.txt'));
66-
$fp = fopen('/local/path/file.txt','r');
67-
Storage::disk('aliyun')->put('dir/path/file.txt', $fp);
65+
Storage::disk("aliyun")->put("dir/path/file.txt", file_get_contents("/local/path/file.txt"));
66+
$fp = fopen("/local/path/file.txt","r");
67+
Storage::disk("aliyun")->put("dir/path/file.txt", $fp);
6868
fclose($fp);
6969

70-
Storage::disk('aliyun')->prepend('dir/path/file.txt', 'Prepend Text');
71-
Storage::disk('aliyun')->append('dir/path/file.txt', 'Append Text');
70+
Storage::disk("aliyun")->prepend("dir/path/file.txt", "Prepend Text");
71+
Storage::disk("aliyun")->append("dir/path/file.txt", "Append Text");
7272

73-
Storage::disk('aliyun')->put('dir/path/secret.txt', 'My secret', 'private');
74-
Storage::disk('aliyun')->put('dir/path/download.txt', 'Download content', ["headers" => ["Content-Disposition" => "attachment; filename=file.txt"]]);
73+
Storage::disk("aliyun")->put("dir/path/secret.txt", "My secret", "private");
74+
Storage::disk("aliyun")->put("dir/path/download.txt", "Download content", ["headers" => ["Content-Disposition" => "attachment;download.txt"]]);
7575
```
7676

7777
#### 读取
7878
```php
79-
Storage::disk('aliyun')->url('dir/path/file.txt');
80-
Storage::disk('aliyun')->temporaryUrl('dir/path/file.txt');
81-
Storage::disk('aliyun')->temporaryUrl('dir/path/file.txt', \Carbon\Carbon::now()->addMinutes(30));
79+
Storage::disk("aliyun")->url("dir/path/file.txt");
80+
Storage::disk("aliyun")->temporaryUrl("dir/path/file.txt");
81+
Storage::disk("aliyun")->temporaryUrl("dir/path/file.txt", \Carbon\Carbon::now()->addMinutes(30));
8282

83-
Storage::disk('aliyun')->get('dir/path/file.txt');
83+
Storage::disk("aliyun")->get("dir/path/file.txt");
8484

85-
Storage::disk('aliyun')->exists('dir/path/file.txt');
86-
Storage::disk('aliyun')->size('dir/path/file.txt');
87-
Storage::disk('aliyun')->lastModified('dir/path/file.txt');
85+
Storage::disk("aliyun")->exists("dir/path/file.txt");
86+
Storage::disk("aliyun")->size("dir/path/file.txt");
87+
Storage::disk("aliyun")->lastModified("dir/path/file.txt");
8888
```
8989

9090
#### 删除
9191
```php
92-
Storage::disk('aliyun')->delete('dir/path/file.txt');
93-
Storage::disk('aliyun')->delete(['dir/path/file1.txt', 'dir/path/file2.txt']);
92+
Storage::disk("aliyun")->delete("dir/path/file.txt");
93+
Storage::disk("aliyun")->delete(["dir/path/file1.txt", "dir/path/file2.txt"]);
9494
```
9595

9696
#### 文件操作
9797
```php
98-
Storage::disk('aliyun')->copy('dir/path/file.txt', 'dir/path/file_new.txt');
99-
Storage::disk('aliyun')->move('dir/path/file.txt', 'dir/path/file_new.txt');
100-
Storage::disk('aliyun')->rename('dir/path/file.txt', 'dir/path/file_new.txt');
98+
Storage::disk("aliyun")->copy("dir/path/file.txt", "dir/path/file_new.txt");
99+
Storage::disk("aliyun")->move("dir/path/file.txt", "dir/path/file_new.txt");
100+
Storage::disk("aliyun")->rename("dir/path/file.txt", "dir/path/file_new.txt");
101101
```
102102

103103
#### 文件夹操作
104104
```php
105-
Storage::disk('aliyun')->makeDirectory('dir/path');
106-
Storage::disk('aliyun')->deleteDirectory('dir/path');
105+
Storage::disk("aliyun")->makeDirectory("dir/path");
106+
Storage::disk("aliyun")->deleteDirectory("dir/path");
107107

108-
Storage::disk('aliyun')->files('dir/path');
109-
Storage::disk('aliyun')->allFiles('dir/path');
108+
Storage::disk("aliyun")->files("dir/path");
109+
Storage::disk("aliyun")->allFiles("dir/path");
110110

111-
Storage::disk('aliyun')->directories('dir/path');
112-
Storage::disk('aliyun')->allDirectories('dir/path');
111+
Storage::disk("aliyun")->directories("dir/path");
112+
Storage::disk("aliyun")->allDirectories("dir/path");
113113
```
114114

115115
#### 使用 Plugin
116116
```php
117-
Storage::disk('aliyun')->appendContent('dir/path/news.txt', 'The first line paragraph.', 0);
118-
Storage::disk('aliyun')->appendContent('dir/path/news.txt', 'The second line paragraph.', 25);
119-
Storage::disk('aliyun')->appendContent('dir/path/news.txt', 'The last line paragraph.', 51);
117+
Storage::disk("aliyun")->appendObject("dir/path/news.txt", "The first line paragraph.", 0);
118+
Storage::disk("aliyun")->appendObject("dir/path/news.txt", "The second line paragraph.", 25);
119+
Storage::disk("aliyun")->appendObject("dir/path/news.txt", "The last line paragraph.", 51);
120+
121+
Storage::disk("aliyun")->appendFile("dir/path/file.zip", "dir/path/file.zip.001", 0);
122+
Storage::disk("aliyun")->appendFile("dir/path/file.zip", "dir/path/file.zip.002", 1000);
123+
Storage::disk("aliyun")->appendFile("dir/path/file.zip", "dir/path/file.zip.003", 1000);
120124
```
121125

122126
#### 使用 OssClient
123127
```php
124-
$adapter = Storage::disk('aliyun')->getAdapter();
128+
$adapter = Storage::disk("aliyun")->getAdapter();
125129
$client = $adapter->getClient();
126-
$client->appendObject($adapter->getBucket(), $adapter->applyPathPrefix('dir/path/file.txt'), 'Append Text', 0);
130+
$bucketCors = $client->getBucketCors($adapter->getBucket());
127131
```
128132

129133
## 文档

README.md

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ This package is a wrapper bridging [aliyun-oss-flysystem](https://github.com/alp
1717
- laravel/framework >= 5.5
1818

1919
## Installation
20-
1. If you use the composer to manage project dependencies, run the following command in your project's root directory:
20+
1. If you use the composer to manage project dependencies, run the following command in your project"s root directory:
2121
```bash
2222
$ composer require alphasnow/aliyun-oss-laravel
2323
```
@@ -33,20 +33,20 @@ This package is a wrapper bridging [aliyun-oss-flysystem](https://github.com/alp
3333

3434
3. (Optional) Modify the configuration file `config/filesystems.php`
3535
```
36-
'default' => env('FILESYSTEM_DRIVER', 'aliyun'),
36+
"default" => env("FILESYSTEM_DRIVER", "aliyun"),
3737
// ...
38-
'disks'=>[
38+
"disks"=>[
3939
// ...
40-
'aliyun' => [
41-
'driver' => 'aliyun',
42-
'access_id' => env('ALIYUN_OSS_ACCESS_ID'), // AccessKey ID, For example: LTAI4**************qgcsA
43-
'access_key' => env('ALIYUN_OSS_ACCESS_KEY'), // AccessKey Secret, For example: PkT4F********************Bl9or
44-
'bucket' => env('ALIYUN_OSS_BUCKET'), // For example: my-storage
45-
'endpoint' => env('ALIYUN_OSS_ENDPOINT'), // For example: oss-cn-shanghai.aliyuncs.com
46-
'internal' => env('ALIYUN_OSS_INTERNAL', null), // For example: oss-cn-shanghai-internal.aliyuncs.com
47-
'domain' => env('ALIYUN_OSS_DOMAIN', null), // For example: oss.my-domain.com
48-
'use_ssl' => env('ALIYUN_OSS_USE_SSL', false), // Whether to use https
49-
'prefix' => env('ALIYUN_OSS_PREFIX', null), // The prefix of the store path
40+
"aliyun" => [
41+
"driver" => "aliyun",
42+
"access_id" => env("ALIYUN_OSS_ACCESS_ID"), // AccessKey ID, For example: LTAI4**************qgcsA
43+
"access_key" => env("ALIYUN_OSS_ACCESS_KEY"), // AccessKey Secret, For example: PkT4F********************Bl9or
44+
"bucket" => env("ALIYUN_OSS_BUCKET"), // For example: my-storage
45+
"endpoint" => env("ALIYUN_OSS_ENDPOINT"), // For example: oss-cn-shanghai.aliyuncs.com
46+
"internal" => env("ALIYUN_OSS_INTERNAL", null), // For example: oss-cn-shanghai-internal.aliyuncs.com
47+
"domain" => env("ALIYUN_OSS_DOMAIN", null), // For example: oss.my-domain.com
48+
"use_ssl" => env("ALIYUN_OSS_USE_SSL", false), // Whether to use https
49+
"prefix" => env("ALIYUN_OSS_PREFIX", null), // The prefix of the store path
5050
],
5151
// ...
5252
]
@@ -55,75 +55,79 @@ This package is a wrapper bridging [aliyun-oss-flysystem](https://github.com/alp
5555
## Usage
5656
```php
5757
use Illuminate\Support\Facades\Storage;
58-
$storage = Storage::disk('aliyun');
58+
$storage = Storage::disk("aliyun");
5959
```
6060
#### Write
6161
```php
62-
Storage::disk('aliyun')->putFile('dir/path', '/local/path/file.txt');
63-
Storage::disk('aliyun')->putFileAs('dir/path', '/local/path/file.txt', 'file.txt');
62+
Storage::disk("aliyun")->putFile("dir/path", "/local/path/file.txt");
63+
Storage::disk("aliyun")->putFileAs("dir/path", "/local/path/file.txt", "file.txt");
6464
65-
Storage::disk('aliyun')->put('dir/path/file.txt', file_get_contents('/local/path/file.txt'));
66-
$fp = fopen('/local/path/file.txt','r');
67-
Storage::disk('aliyun')->put('dir/path/file.txt', $fp);
65+
Storage::disk("aliyun")->put("dir/path/file.txt", file_get_contents("/local/path/file.txt"));
66+
$fp = fopen("/local/path/file.txt","r");
67+
Storage::disk("aliyun")->put("dir/path/file.txt", $fp);
6868
fclose($fp);
6969
70-
Storage::disk('aliyun')->prepend('dir/path/file.txt', 'Prepend Text');
71-
Storage::disk('aliyun')->append('dir/path/file.txt', 'Append Text');
70+
Storage::disk("aliyun")->prepend("dir/path/file.txt", "Prepend Text");
71+
Storage::disk("aliyun")->append("dir/path/file.txt", "Append Text");
7272
73-
Storage::disk('aliyun')->put('dir/path/secret.txt', 'My secret', 'private');
74-
Storage::disk('aliyun')->put('dir/path/download.txt', 'Download content', ["headers" => ["Content-Disposition" => "attachment; filename=file.txt"]]);
73+
Storage::disk("aliyun")->put("dir/path/secret.txt", "My secret", "private");
74+
Storage::disk("aliyun")->put("dir/path/download.txt", "Download content", ["headers" => ["Content-Disposition" => "attachment;download.txt"]]);
7575
```
7676
7777
#### Read
7878
```php
79-
Storage::disk('aliyun')->url('dir/path/file.txt');
80-
Storage::disk('aliyun')->temporaryUrl('dir/path/file.txt');
81-
Storage::disk('aliyun')->temporaryUrl('dir/path/file.txt', \Carbon\Carbon::now()->addMinutes(30));
79+
Storage::disk("aliyun")->url("dir/path/file.txt");
80+
Storage::disk("aliyun")->temporaryUrl("dir/path/file.txt");
81+
Storage::disk("aliyun")->temporaryUrl("dir/path/file.txt", \Carbon\Carbon::now()->addMinutes(30));
8282
83-
Storage::disk('aliyun')->get('dir/path/file.txt');
83+
Storage::disk("aliyun")->get("dir/path/file.txt");
8484
85-
Storage::disk('aliyun')->exists('dir/path/file.txt');
86-
Storage::disk('aliyun')->size('dir/path/file.txt');
87-
Storage::disk('aliyun')->lastModified('dir/path/file.txt');
85+
Storage::disk("aliyun")->exists("dir/path/file.txt");
86+
Storage::disk("aliyun")->size("dir/path/file.txt");
87+
Storage::disk("aliyun")->lastModified("dir/path/file.txt");
8888
```
8989
9090
#### Delete
9191
```php
92-
Storage::disk('aliyun')->delete('dir/path/file.txt');
93-
Storage::disk('aliyun')->delete(['dir/path/file1.txt', 'dir/path/file2.txt']);
92+
Storage::disk("aliyun")->delete("dir/path/file.txt");
93+
Storage::disk("aliyun")->delete(["dir/path/file1.txt", "dir/path/file2.txt"]);
9494
```
9595
9696
#### File operation
9797
```php
98-
Storage::disk('aliyun')->copy('dir/path/file.txt', 'dir/path/file_new.txt');
99-
Storage::disk('aliyun')->move('dir/path/file.txt', 'dir/path/file_new.txt');
100-
Storage::disk('aliyun')->rename('dir/path/file.txt', 'dir/path/file_new.txt');
98+
Storage::disk("aliyun")->copy("dir/path/file.txt", "dir/path/file_new.txt");
99+
Storage::disk("aliyun")->move("dir/path/file.txt", "dir/path/file_new.txt");
100+
Storage::disk("aliyun")->rename("dir/path/file.txt", "dir/path/file_new.txt");
101101
```
102102
103103
#### Folder operation
104104
```php
105-
Storage::disk('aliyun')->makeDirectory('dir/path');
106-
Storage::disk('aliyun')->deleteDirectory('dir/path');
105+
Storage::disk("aliyun")->makeDirectory("dir/path");
106+
Storage::disk("aliyun")->deleteDirectory("dir/path");
107107
108-
Storage::disk('aliyun')->files('dir/path');
109-
Storage::disk('aliyun')->allFiles('dir/path');
108+
Storage::disk("aliyun")->files("dir/path");
109+
Storage::disk("aliyun")->allFiles("dir/path");
110110
111-
Storage::disk('aliyun')->directories('dir/path');
112-
Storage::disk('aliyun')->allDirectories('dir/path');
111+
Storage::disk("aliyun")->directories("dir/path");
112+
Storage::disk("aliyun")->allDirectories("dir/path");
113113
```
114114
115115
#### Use Plugin
116116
```php
117-
Storage::disk('aliyun')->appendContent('dir/path/news.txt', 'The first line paragraph.', 0);
118-
Storage::disk('aliyun')->appendContent('dir/path/news.txt', 'The second line paragraph.', 25);
119-
Storage::disk('aliyun')->appendContent('dir/path/news.txt', 'The last line paragraph.', 51);
117+
Storage::disk("aliyun")->appendObject("dir/path/news.txt", "The first line paragraph.", 0);
118+
Storage::disk("aliyun")->appendObject("dir/path/news.txt", "The second line paragraph.", 25);
119+
Storage::disk("aliyun")->appendObject("dir/path/news.txt", "The last line paragraph.", 51);
120+
121+
Storage::disk("aliyun")->appendFile("dir/path/file.zip", "dir/path/file.zip.001", 0);
122+
Storage::disk("aliyun")->appendFile("dir/path/file.zip", "dir/path/file.zip.002", 1000);
123+
Storage::disk("aliyun")->appendFile("dir/path/file.zip", "dir/path/file.zip.003", 1000);
120124
```
121125
122126
#### Use OssClient
123127
```php
124-
$adapter = Storage::disk('aliyun')->getAdapter();
128+
$adapter = Storage::disk("aliyun")->getAdapter();
125129
$client = $adapter->getClient();
126-
$client->appendObject($adapter->getBucket(), $adapter->applyPathPrefix('dir/path/file.txt'), 'Append Text', 0);
130+
$bucketCors = $client->getBucketCors($adapter->getBucket());
127131
```
128132
129133
## Documentation

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
],
1313
"require": {
1414
"php": ">=7.0.0",
15-
"alphasnow/aliyun-oss-flysystem": "^1.4"
15+
"alphasnow/aliyun-oss-flysystem": "^1.5"
1616
},
1717
"require-dev": {
1818
"mockery/mockery": "^1.3",

src/Adapter.php

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
use League\Flysystem\Config as FlysystemConfig;
77
use OSS\OssClient;
88

9-
/**
10-
* Class Adapter
11-
*/
129
class Adapter extends BaseAdapter
1310
{
1411
/**
@@ -17,13 +14,27 @@ class Adapter extends BaseAdapter
1714
protected $ossConfig;
1815

1916
/**
20-
* @param OssClient $ossClient
17+
* @param OssClient $client
18+
* @param string $bucket
19+
* @param string $prefix
20+
* @param array $options
21+
*/
22+
public function __construct(OssClient $client, $bucket, $prefix = "", array $options = [])
23+
{
24+
parent::__construct($client, $bucket, $prefix, $options);
25+
26+
$this->ossConfig = new Config(compact("bucket", "prefix", "options"));
27+
}
28+
29+
/**
2130
* @param Config $ossConfig
31+
* @return $this
2232
*/
23-
public function __construct(OssClient $ossClient, Config $ossConfig)
33+
public function setOssConfig(Config $ossConfig)
2434
{
2535
$this->ossConfig = $ossConfig;
26-
parent::__construct($ossClient, $ossConfig->get("bucket"), ltrim($ossConfig->get("prefix", null), "/"), $ossConfig->get("options", []));
36+
37+
return $this;
2738
}
2839

2940
/**
@@ -36,6 +47,7 @@ public function __construct(OssClient $ossClient, Config $ossConfig)
3647
public function getUrl($path)
3748
{
3849
$object = $this->applyPathPrefix($path);
50+
3951
return $this->ossConfig->getUrlDomain() . "/" . ltrim($object, "/");
4052
}
4153

@@ -54,13 +66,14 @@ public function getTemporaryUrl($path, $expiration = null, array $options = [])
5466
{
5567
$object = $this->applyPathPrefix($path);
5668
$clientOptions = $this->getOptionsFromConfig(new FlysystemConfig($options));
57-
5869
if (is_null($expiration)) {
5970
$expiration = new \DateTime($this->ossConfig->get("signature_expires", "+60 minutes"));
6071
}
6172
$timeout = $expiration->getTimestamp() - (new \DateTime("now"))->getTimestamp();
73+
$method = $options[OssClient::OSS_METHOD] ?? OssClient::OSS_HTTP_GET;
74+
75+
$url = $this->client->signUrl($this->bucket, $object, $timeout, $method, $clientOptions);
6276

63-
$url = $this->client->signUrl($this->bucket, $object, $timeout, OssClient::OSS_HTTP_GET, $clientOptions);
6477
return $this->ossConfig->correctUrl($url);
6578
}
6679
}

src/Config.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ class Config extends Collection
1515
public function getUrlDomain()
1616
{
1717
if ($this->get("domain")) {
18+
if (strpos("$".$this->get("domain"), "http") != false) {
19+
return $this->get("domain");
20+
}
1821
return $this->getProtocol()."://".$this->get("domain");
1922
}
2023
return $this->getEndpointDomain();
@@ -67,6 +70,7 @@ public function isCName()
6770
}
6871

6972
/**
73+
* @deprecated
7074
* @return array
7175
*/
7276
public function getOssClientParameters()

0 commit comments

Comments
 (0)