add progress

This commit is contained in:
jojoliang
2020-10-14 17:36:28 +08:00
parent e39f3e3585
commit 2afc5e192c
8 changed files with 306 additions and 31 deletions

View File

@@ -19,7 +19,7 @@ func log_status(err error) {
}
if cos.IsNotFoundError(err) {
// WARN
fmt.Println("WARN: Resource is not existed")
fmt.Println("WARN: Resource is not existed")
} else if e, ok := cos.IsCOSError(err); ok {
fmt.Printf("ERROR: Code: %v\n", e.Code)
fmt.Printf("ERROR: Message: %v\n", e.Message)
@@ -33,7 +33,7 @@ func log_status(err error) {
}
func main() {
u, _ := url.Parse("https://test-1253846586.cos.ap-guangzhou.myqcloud.com")
u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
@@ -48,8 +48,8 @@ func main() {
},
})
// Case1 Download object into ReadCloser(). the body needs to be closed
name := "test/hello.txt"
// Case1 通过resp.Body下载对象Body需要关闭
name := "test/example"
resp, err := c.Object.Get(context.Background(), name, nil)
log_status(err)
@@ -57,8 +57,8 @@ func main() {
resp.Body.Close()
fmt.Printf("%s\n", string(bs))
// Case2 Download object to local file. the body needs to be closed
fd, err := os.OpenFile("hello.txt", os.O_WRONLY|os.O_CREATE, 0660)
// Case2 下载对象到文件. Body需要关闭
fd, err := os.OpenFile("test", os.O_WRONLY|os.O_CREATE, 0660)
log_status(err)
defer fd.Close()
@@ -68,11 +68,11 @@ func main() {
io.Copy(fd, resp.Body)
resp.Body.Close()
// Case3 Download object to local file path
_, err = c.Object.GetToFile(context.Background(), name, "hello_1.txt", nil)
// Case3 下载对象到文件
_, err = c.Object.GetToFile(context.Background(), name, "test", nil)
log_status(err)
// Case4 Download object with range header, can used to concurrent download
// Case4 range下载对象可以根据range实现并发下载
opt := &cos.ObjectGetOptions{
ResponseContentType: "text/html",
Range: "bytes=0-3",
@@ -82,4 +82,11 @@ func main() {
bs, _ = ioutil.ReadAll(resp.Body)
resp.Body.Close()
fmt.Printf("%s\n", string(bs))
// Case5 下载对象到文件,查看下载进度
opt = &cos.ObjectGetOptions{
Listener: &cos.DefaultProgressListener{},
}
_, err = c.Object.GetToFile(context.Background(), name, "test", opt)
log_status(err)
}

View File

@@ -19,7 +19,7 @@ func log_status(err error) {
}
if cos.IsNotFoundError(err) {
// WARN
fmt.Println("WARN: Resource is not existed")
fmt.Println("WARN: Resource is not existed")
} else if e, ok := cos.IsCOSError(err); ok {
fmt.Printf("ERROR: Code: %v\n", e.Code)
fmt.Printf("ERROR: Message: %v\n", e.Message)
@@ -44,20 +44,19 @@ func main() {
// Notice when put a large file and set need the request body, might happend out of memory error.
RequestBody: false,
ResponseHeader: true,
ResponseBody: true,
ResponseBody: false,
},
},
})
// Case1 normal put object
name := "test/objectPut.go"
// Case1 上传对象
name := "test/example"
f := strings.NewReader("test")
_, err := c.Object.Put(context.Background(), name, f, nil)
log_status(err)
// Case2 put object with the options
name = "test/put_option.go"
// Case2 使用options上传对象
f = strings.NewReader("test xxx")
opt := &cos.ObjectPutOptions{
ObjectPutHeaderOptions: &cos.ObjectPutHeaderOptions{
@@ -71,7 +70,11 @@ func main() {
_, err = c.Object.Put(context.Background(), name, f, opt)
log_status(err)
// Case3 put object by local file path
// Case3 通过本地文件上传对象
_, err = c.Object.PutFromFile(context.Background(), name, "./test", nil)
log_status(err)
// Case4 查看上传进度
opt.ObjectPutHeaderOptions.Listener = &cos.DefaultProgressListener{}
_, err = c.Object.PutFromFile(context.Background(), name, "./test", opt)
}

View File

@@ -49,9 +49,26 @@ func main() {
},
})
// Case1 多线程上传对象
opt := &cos.MultiUploadOptions{
ThreadPoolSize: 3,
}
v, _, err := c.Object.Upload(
context.Background(), "gomulput1G", "./test1G", nil,
context.Background(), "gomulput1G", "./test1G", opt,
)
log_status(err)
fmt.Println(v)
fmt.Printf("Case1 done, %v\n", v)
// Case2 多线程上传对象,查看上传进度
opt.OptIni = &cos.InitiateMultipartUploadOptions{
nil,
&cos.ObjectPutHeaderOptions{
Listener: &cos.DefaultProgressListener{},
},
}
v, _, err = c.Object.Upload(
context.Background(), "gomulput1G", "./test1G", opt,
)
log_status(err)
fmt.Printf("Case2 done, %v\n", v)
}

View File

@@ -41,7 +41,7 @@ func initUpload(c *cos.Client, name string) *cos.InitiateMultipartUploadResult {
}
func main() {
u, _ := url.Parse("https://test-1253846586.cos.ap-guangzhou.myqcloud.com")
u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
@@ -49,20 +49,50 @@ func main() {
SecretKey: os.Getenv("COS_SECRETKEY"),
Transport: &debug.DebugRequestTransport{
RequestHeader: true,
RequestBody: true,
RequestBody: false,
ResponseHeader: true,
ResponseBody: true,
ResponseBody: false,
},
},
})
optcom := &cos.CompleteMultipartUploadOptions{}
name := "test/test_multi_upload.go"
up := initUpload(c, name)
uploadID := up.UploadID
fd, err := os.Open("test")
if err != nil {
fmt.Printf("Open File Error: %v\n", err)
return
}
defer fd.Close()
stat, err := fd.Stat()
if err != nil {
fmt.Printf("Stat File Error: %v\n", err)
return
}
opt := &cos.ObjectUploadPartOptions{
Listener: &cos.DefaultProgressListener{},
ContentLength: int(stat.Size()),
}
resp, err := c.Object.UploadPart(
context.Background(), name, uploadID, 1, fd, opt,
)
optcom.Parts = append(optcom.Parts, cos.Object{
PartNumber: 1, ETag: resp.Header.Get("ETag"),
})
log_status(err)
f := strings.NewReader("test heoo")
_, err := c.Object.UploadPart(
context.Background(), name, uploadID, 1, f, nil,
resp, err = c.Object.UploadPart(
context.Background(), name, uploadID, 2, f, nil,
)
log_status(err)
optcom.Parts = append(optcom.Parts, cos.Object{
PartNumber: 2, ETag: resp.Header.Get("ETag"),
})
_, _, err = c.Object.CompleteMultipartUpload(context.Background(), name, uploadID, optcom)
log_status(err)
}