-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
143 lines (132 loc) · 2.48 KB
/
main.go
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
134
135
136
137
138
139
140
141
142
143
package main
import (
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
"os"
)
var (
Logger *logrus.Logger
App *cli.App
Cli IOssCli
)
func init() {
Logger = newLogger()
}
func main() {
// 初始化 Cli
Cli = &AliOssCli{}
// 注册 App
App := makeApp()
registerCommands(App)
registerFlags(App)
err := App.Run(os.Args)
if err != nil {
Logger.Fatal(err)
}
}
// 生成 cli
func makeApp() *cli.App {
app := cli.NewApp()
app.Name = "oss-cli"
app.Usage = "OSS Cli 管理工具"
app.Version = env("APP_VERSION", "0.0.0")
return app
}
// 注册 命令
func registerCommands(app *cli.App) {
app.EnableBashCompletion = true
app.Commands = []cli.Command{
{
Name: "test",
Usage: "测试配置是否正确",
Action: Cli.Test,
},
{
Name: "add",
Usage: "上传文件到 OSS 中",
Action: Cli.Add,
Flags: getAddFlags(),
},
{
Name: "list",
Usage: "查看文件列表",
Action: Cli.ListFiles,
Flags: getListFlags(),
},
}
}
// 注册 Flags
func registerFlags(app *cli.App) {
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "key, k",
Usage: "账户 API `access_key`",
EnvVar: "ACCESS_KEY",
},
cli.StringFlag{
Name: "secret, s",
Usage: "账户 API `access_key_secret`",
EnvVar: "ACCESS_KEY_SECRET",
},
cli.StringFlag{
Name: "bucket, b",
Usage: "存储空间 Bucket Name `bucket_name`",
EnvVar: "BUCKET_NAME",
},
cli.StringFlag{
Name: "region, r",
Usage: "地域 Region Name `region name`",
EnvVar: "REGION_NAME",
},
cli.BoolFlag{
Name: "internal, i",
Usage: "使用内网进行连接",
EnvVar: "USE_INTERNAL",
},
}
}
func getListFlags() []cli.Flag {
return []cli.Flag{
cli.StringFlag{
Name: "prefix, p",
Usage: "匹配文件前缀",
},
cli.StringFlag{
Name: "sort",
Usage: "排序方式 asc, desc",
},
cli.IntFlag{
Name: "limit, l",
Usage: "最大显示条数, 0 不限制",
Value: 0,
},
cli.BoolFlag{
Name: "dir",
Usage: "只显示目录",
},
cli.StringFlag{
Name: "search, s",
Usage: "通过文件名搜索文件",
},
}
}
func getAddFlags() []cli.Flag {
return []cli.Flag{
cli.BoolFlag{
Name: "breakpoint, b",
Usage: "开启断点续传",
},
cli.StringFlag{
Name: "file, f",
Usage: "文件路径",
},
cli.StringFlag{
Name: "save, s",
Usage: "OSS 中保存的目录",
},
cli.IntFlag{
Name: "random",
Usage: "随机生成新的文件名长度,0 使用原文件名称",
},
}
}