1package main
2
3import (
4	"context"
5	"fmt"
6	"math/rand"
7	"net/url"
8	"os"
9	"strings"
10
11	"net/http"
12
13	"github.com/mozillazg/go-cos"
14	"github.com/mozillazg/go-cos/debug"
15)
16
17func initUpload(c *cos.Client, name string) *cos.InitiateMultipartUploadResult {
18	v, _, err := c.Object.InitiateMultipartUpload(context.Background(), name, nil)
19	if err != nil {
20		panic(err)
21	}
22	fmt.Printf("%#v\n", v)
23	return v
24}
25
26func uploadPart(c *cos.Client, name string, uploadID string, blockSize, n int) string {
27
28	b := make([]byte, blockSize)
29	if _, err := rand.Read(b); err != nil {
30		panic(err)
31	}
32	s := fmt.Sprintf("%X", b)
33	f := strings.NewReader(s)
34
35	resp, err := c.Object.UploadPart(
36		context.Background(), name, uploadID, n, f, nil,
37	)
38	if err != nil {
39		panic(err)
40	}
41	fmt.Printf("%s\n", resp.Status)
42	return resp.Header.Get("Etag")
43}
44
45func main() {
46	u, _ := url.Parse(os.Getenv("COS_BUCKET_URL"))
47	b := &cos.BaseURL{BucketURL: u}
48	c := cos.NewClient(b, &http.Client{
49		Transport: &cos.AuthorizationTransport{
50			SecretID:  os.Getenv("COS_SECRETID"),
51			SecretKey: os.Getenv("COS_SECRETKEY"),
52			Transport: &debug.DebugRequestTransport{
53				RequestHeader:  true,
54				RequestBody:    false,
55				ResponseHeader: true,
56				ResponseBody:   true,
57			},
58		},
59	})
60
61	name := "test/test_list_parts.go"
62	up := initUpload(c, name)
63	uploadID := up.UploadID
64	ctx := context.Background()
65	blockSize := 1024 * 1024 * 3
66
67	for i := 1; i < 5; i++ {
68		uploadPart(c, name, uploadID, blockSize, i)
69	}
70	opt := &cos.ObjectListPartsOptions{
71		MaxParts: 2,
72	}
73
74	v, _, err := c.Object.ListPartsWithOpt(ctx, name, uploadID, opt)
75	if err != nil {
76		panic(err)
77		return
78	}
79	for _, p := range v.Parts {
80		fmt.Printf("%d, %s, %d\n", p.PartNumber, p.ETag, p.Size)
81	}
82	fmt.Printf("%s\n", v.Initiator.ID)
83	fmt.Printf("%s\n", v.Owner.ID)
84}
85