Skip to content

Commit cc15dac

Browse files
authored
Merge pull request #198 from tonycai653/master
add docs for get and pfop command
2 parents eee51f7 + f506f21 commit cc15dac

27 files changed

+479
-143
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# 2.3.1
2+
1. batchdelete, batchchgm, batchchtype, batchmove, batchrename命令运行可导出失败,成功文件列表
3+
2. rput, fput, qupload上传支持设置回调用
4+
3. 修复qdownload, qupload 配置文件Windows下UTF-8 BOM解码出错问题
5+
16
# 2.3.0
27
1. 重构qshell代码,方便后续合并qrsctl, qfetch,和添加新的功能
38
2. 加入了user命令, 多用户管理,可以在多个用户之间切换

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ $ echo "source <(qshell completion bash)" >> ~/.bashrc
9999
```
100100

101101
**Mac上,使用zsh**
102-
把如下代码加入zsh的启动文件中~/.zshrc
102+
把如下代码加入zsh的启动文件中~/.zshrc, 然后source ~/.zshrc
103103

104104
```
105105
if [ $commands[qshell] ]; then
@@ -127,21 +127,29 @@ fi
127127

128128
默认官方的列举空间的文件使用的是rs.qiniu.com域名,如果因为某种原因,比如私有存储,需要替换使用rs-test.qiniu.com这个域名的话,那么只需要
129129
在家目录下创建文件名字为.qshell.json的配置文件,文件内容为
130+
131+
```json
130132
{
131133
"hosts": {
132134
"rs_host": "rs-test.qiniu.com"
133135
}
134136
}
137+
```
135138

136139
如果想要更改io host为io-test.qiniu.com的话,只需要继续在上面的hosts中添加,如下:
140+
141+
```json
137142
{
138143
"hosts": {
139144
"rs_host": "rs-test.qiniu.com",
140145
"io_host": "io-test.qiniu.com"
141146
}
142147
}
148+
```
143149

144150
同理如果全部修改的话
151+
152+
```json
145153
{
146154
"hosts": {
147155
"rs_host": "rs-test.qiniu.com",
@@ -150,6 +158,7 @@ fi
150158
"rsf_host": ""
151159
}
152160
}
161+
```
153162

154163

155164
## 命令列表
@@ -206,6 +215,8 @@ fi
206215
|ip|工具|根据淘宝的公开API查询ip地址的地理位置|[文档](docs/ip.md)|
207216
|unzip|工具|解压zip文件,支持UTF-8编码和GBK编码|[文档](docs/unzip.md)|
208217
|alilistbucket|第三方|列举阿里OSS空间里面的所有文件|[文档](docs/alilistbucket.md)|
218+
|get|存储|下载存储空间中的文件|[文档](docs/get.md)|
219+
|pfop|dora异步处理|提交异步音视频处理请求|[文档](docs/pfop.md)
209220

210221
## 问题反馈
211222

cmd/putfile.go

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ var upSettings = storage.Settings{
1919
}
2020

2121
var (
22-
pOverwrite bool
23-
mimeType string
24-
fileType int
25-
workerCount int
26-
upHost string
22+
pOverwrite bool
23+
mimeType string
24+
fileType int
25+
workerCount int
26+
upHost string
27+
callbackUrls string
28+
callbackHost string
2729
)
2830

2931
var formPutCmd = &cobra.Command{
@@ -46,12 +48,16 @@ func init() {
4648
formPutCmd.Flags().IntVarP(&fileType, "storage", "s", 0, "storage type")
4749
formPutCmd.Flags().IntVarP(&workerCount, "worker", "c", 16, "worker count")
4850
formPutCmd.Flags().StringVarP(&upHost, "up-host", "u", "", "uphost")
51+
formPutCmd.Flags().StringVarP(&callbackUrls, "callback-urls", "l", "", "upload callback urls, separated by comma")
52+
formPutCmd.Flags().StringVarP(&callbackHost, "callback-host", "T", "", "upload callback host")
4953

5054
RePutCmd.Flags().BoolVarP(&pOverwrite, "overwrite", "w", false, "overwrite mode")
5155
RePutCmd.Flags().StringVarP(&mimeType, "mimetype", "t", "", "file mime type")
5256
RePutCmd.Flags().IntVarP(&fileType, "storage", "s", 0, "storage type")
5357
RePutCmd.Flags().IntVarP(&workerCount, "worker", "c", 16, "worker count")
5458
RePutCmd.Flags().StringVarP(&upHost, "up-host", "u", "", "uphost")
59+
RePutCmd.Flags().StringVarP(&callbackUrls, "callback-urls", "l", "", "upload callback urls, separated by comma")
60+
RePutCmd.Flags().StringVarP(&callbackHost, "callback-host", "T", "", "upload callback host")
5561

5662
viper.BindPFlag("hosts.up_host", formPutCmd.Flags().Lookup("up-host"))
5763
viper.BindPFlag("hosts.up_host", RePutCmd.Flags().Lookup("up-host"))
@@ -86,6 +92,17 @@ func FormPut(cmd *cobra.Command, params []string) {
8692
policy.FileType = fileType
8793
policy.Expires = 7 * 24 * 3600
8894
policy.ReturnBody = `{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"mimeType":"$(mimeType)"}`
95+
if (callbackUrls == "" && callbackHost != "") || (callbackUrls != "" && callbackHost == "") {
96+
fmt.Fprintf(os.Stderr, "callbackUrls and callback must exist at the same time\n")
97+
os.Exit(1)
98+
}
99+
if callbackHost != "" && callbackUrls != "" {
100+
callbackUrls = strings.Replace(callbackUrls, ",", ";", -1)
101+
policy.CallbackHost = callbackHost
102+
policy.CallbackURL = callbackUrls
103+
policy.CallbackBody = "key=$(key)&hash=$(etag)"
104+
policy.CallbackBodyType = "application/x-www-form-urlencoded"
105+
}
89106

90107
var putExtra storage.PutExtra
91108

@@ -193,6 +210,17 @@ func ResumablePut(cmd *cobra.Command, params []string) {
193210
policy.FileType = fileType
194211
policy.Expires = 7 * 24 * 3600
195212
policy.ReturnBody = `{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"mimeType":"$(mimeType)"}`
213+
if (callbackUrls == "" && callbackHost != "") || (callbackUrls != "" && callbackHost == "") {
214+
fmt.Fprintf(os.Stderr, "callbackUrls and callback must exist at the same time\n")
215+
os.Exit(1)
216+
}
217+
if callbackHost != "" && callbackUrls != "" {
218+
callbackUrls = strings.Replace(callbackUrls, ",", ";", -1)
219+
policy.CallbackHost = callbackHost
220+
policy.CallbackURL = callbackUrls
221+
policy.CallbackBody = "key=$(key)&hash=$(etag)"
222+
policy.CallbackBodyType = "application/x-www-form-urlencoded"
223+
}
196224

197225
var putExtra storage.RputExtra
198226
if upHost != "" {

cmd/qdownload.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package cmd
22

33
import (
4+
"bytes"
45
"encoding/json"
56
"fmt"
67
"github.com/astaxie/beego/logs"
78
"github.com/qiniu/qshell/iqshell"
89
"github.com/spf13/cobra"
10+
"io/ioutil"
911
"os"
1012
)
1113

@@ -38,9 +40,18 @@ func QiniuDownload(cmd *cobra.Command, params []string) {
3840
fmt.Fprintf(os.Stderr, "open file: %s: %v\n", configFile, oErr)
3941
os.Exit(1)
4042
}
41-
dErr := json.NewDecoder(cfh).Decode(&downloadConfig)
42-
if dErr != nil {
43-
fmt.Fprintf(os.Stderr, "decode configFile content: %v\n", dErr)
43+
content, rErr := ioutil.ReadAll(cfh)
44+
if rErr != nil {
45+
fmt.Fprintf(os.Stderr, "read configFile content: %v\n", rErr)
46+
os.Exit(1)
47+
}
48+
49+
// remove windows utf-8 BOM
50+
content = bytes.TrimPrefix(content, []byte("\xef\xbb\xbf"))
51+
uErr := json.Unmarshal(content, &downloadConfig)
52+
53+
if uErr != nil {
54+
fmt.Fprintf(os.Stderr, "decode configFile content: %v\n", uErr)
4455
os.Exit(1)
4556
}
4657

cmd/qupload.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package cmd
22

33
import (
4+
"bytes"
45
"encoding/json"
56
"fmt"
67
"github.com/astaxie/beego/logs"
8+
"github.com/qiniu/api.v7/storage"
79
"github.com/qiniu/qshell/iqshell"
810
"github.com/spf13/cobra"
911
"io/ioutil"
1012
"os"
13+
"strings"
1114
)
1215

1316
var qUploadCmd = &cobra.Command{
@@ -30,6 +33,8 @@ func init() {
3033
qUploadCmd.Flags().StringVarP(&failureFname, "failure-list", "f", "", "upload failure file list")
3134
qUploadCmd.Flags().StringVarP(&overwriteFname, "overwrite-list", "w", "", "upload success (overwrite) file list")
3235
qUploadCmd.Flags().Int64VarP(&upthreadCount, "worker", "c", 1, "worker count")
36+
qUploadCmd.Flags().StringVarP(&callbackUrls, "callback-urls", "l", "", "upload callback urls, separated by comma")
37+
qUploadCmd.Flags().StringVarP(&callbackHost, "callback-host", "T", "", "upload callback host")
3338
RootCmd.AddCommand(qUploadCmd)
3439
}
3540

@@ -51,6 +56,8 @@ func parseUploadConfigFile(uploadConfigFile string, uploadConfig *iqshell.Upload
5156
err = fmt.Errorf("Read upload config file `%s`: %v\n", uploadConfigFile, rErr)
5257
return
5358
}
59+
//remove UTF-8 BOM
60+
configData = bytes.TrimPrefix(configData, []byte("\xef\xbb\xbf"))
5461
uErr := json.Unmarshal(configData, uploadConfig)
5562
if uErr != nil {
5663
err = fmt.Errorf("Parse upload config file `%s`: %v\n", uploadConfigFile, uErr)
@@ -84,6 +91,24 @@ func QiniuUpload(cmd *cobra.Command, params []string) {
8491
logs.Error("Upload src dir should be a directory")
8592
os.Exit(iqshell.STATUS_HALT)
8693
}
94+
policy := storage.PutPolicy{}
95+
96+
if (callbackUrls == "" && callbackHost != "") || (callbackUrls != "" && callbackHost == "") {
97+
fmt.Fprintf(os.Stderr, "callbackUrls and callback must exist at the same time\n")
98+
os.Exit(1)
99+
}
100+
if (uploadConfig.CallbackUrls == "" && uploadConfig.CallbackHost != "") || (uploadConfig.CallbackUrls != "" && uploadConfig.CallbackHost == "") {
101+
fmt.Fprintf(os.Stderr, "callbackUrls and callback must exist at the same time\n")
102+
os.Exit(1)
103+
}
104+
if (callbackHost != "" && callbackUrls != "") || (uploadConfig.CallbackHost != "" && uploadConfig.CallbackUrls != "") {
105+
callbackUrls = strings.Replace(callbackUrls, ",", ";", -1)
106+
policy.CallbackHost = callbackHost
107+
policy.CallbackURL = callbackUrls
108+
policy.CallbackBody = "key=$(key)&hash=$(etag)"
109+
policy.CallbackBodyType = "application/x-www-form-urlencoded"
110+
}
111+
uploadConfig.PutPolicy = policy
87112

88113
//upload
89114
if upthreadCount < iqshell.MIN_UPLOAD_THREAD_COUNT || upthreadCount > iqshell.MAX_UPLOAD_THREAD_COUNT {

cmd/qupload2.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package cmd
33
import (
44
"fmt"
55
"github.com/astaxie/beego/logs"
6+
"github.com/qiniu/api.v7/storage"
67
"github.com/qiniu/qshell/iqshell"
78
"github.com/spf13/cobra"
89
"os"
10+
"strings"
911
)
1012

1113
var qUpload2Cmd = &cobra.Command{
@@ -48,6 +50,8 @@ func init() {
4850
qUpload2Cmd.Flags().StringVar(&successFname, "success-list", "", "upload success file list")
4951
qUpload2Cmd.Flags().StringVar(&failureFname, "failure-list", "", "upload failure file list")
5052
qUpload2Cmd.Flags().StringVar(&overwriteFname, "overwrite-list", "", "upload success (overwrite) file list")
53+
qUpload2Cmd.Flags().StringVarP(&callbackUrls, "callback-urls", "l", "", "upload callback urls, separated by comma")
54+
qUpload2Cmd.Flags().StringVarP(&callbackHost, "callback-host", "T", "", "upload callback host")
5155

5256
RootCmd.AddCommand(qUpload2Cmd)
5357
}
@@ -69,6 +73,20 @@ func QiniuUpload2(cmd *cobra.Command, params []string) {
6973
logs.Error("Upload config `SrcDir` not exist error,", err)
7074
os.Exit(iqshell.STATUS_HALT)
7175
}
76+
policy := storage.PutPolicy{}
77+
78+
if (callbackUrls == "" && callbackHost != "") || (callbackUrls != "" && callbackHost == "") {
79+
fmt.Fprintf(os.Stderr, "callbackUrls and callback must exist at the same time\n")
80+
os.Exit(1)
81+
}
82+
if callbackHost != "" && callbackUrls != "" {
83+
callbackUrls = strings.Replace(callbackUrls, ",", ";", -1)
84+
policy.CallbackHost = callbackHost
85+
policy.CallbackURL = callbackUrls
86+
policy.CallbackBody = "key=$(key)&hash=$(etag)"
87+
policy.CallbackBodyType = "application/x-www-form-urlencoded"
88+
}
89+
uploadConfig.PutPolicy = policy
7290

7391
if up2threadCount < iqshell.MIN_UPLOAD_THREAD_COUNT || up2threadCount > iqshell.MAX_UPLOAD_THREAD_COUNT {
7492
fmt.Printf("Tip: you can set <ThreadCount> value between %d and %d to improve speed\n",

cmd/rs.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,8 +429,13 @@ func M3u8Delete(cmd *cobra.Command, params []string) {
429429
fmt.Fprintln(os.Stderr, "no m3u8 slices found")
430430
os.Exit(iqshell.STATUS_ERROR)
431431
}
432+
fileExporter, nErr := iqshell.NewFileExporter("", "", "")
433+
if nErr != nil {
434+
fmt.Fprintf(os.Stderr, "create FileExporter: %v\n", nErr)
435+
os.Exit(1)
436+
}
432437
if entryCnt <= BATCH_ALLOW_MAX {
433-
batchDelete(m3u8FileList, bm)
438+
batchDelete(m3u8FileList, bm, fileExporter)
434439
} else {
435440
batchCnt := entryCnt / BATCH_ALLOW_MAX
436441
for i := 0; i < batchCnt; i++ {
@@ -439,7 +444,7 @@ func M3u8Delete(cmd *cobra.Command, params []string) {
439444
end = entryCnt
440445
}
441446
entriesToDelete := m3u8FileList[i*BATCH_ALLOW_MAX : end]
442-
batchDelete(entriesToDelete, bm)
447+
batchDelete(entriesToDelete, bm, fileExporter)
443448
}
444449
}
445450
}

0 commit comments

Comments
 (0)