Browse Source

add ci doc

tags/v0.7.13^2
jojoliang 4 years ago
parent
commit
dad5b1f3fb
  1. 4
      batch.go
  2. 102
      bucket_test.go
  3. 17
      ci.go
  4. 271
      ci_doc.go
  5. 2
      cos.go
  6. 14
      example/bucket/intelligenttiering.go
  7. 132
      example/object/ci_doc_process.go
  8. 2
      object_test.go
  9. 8
      service_test.go

4
batch.go

@ -13,7 +13,7 @@ type BatchRequestHeaders struct {
XCosAppid int `header:"x-cos-appid" xml:"-" url:"-"`
ContentLength string `header:"Content-Length,omitempty" xml:"-" url:"-"`
ContentType string `header:"Content-Type,omitempty" xml:"-" url:"-"`
Headers *http.Header `header:"-" xml:"-", url:"-"`
Headers *http.Header `header:"-" xml:"-" url:"-"`
}
// BatchProgressSummary
@ -244,7 +244,7 @@ func (s *BatchService) UpdateJobPriority(ctx context.Context, opt *BatchUpdatePr
type BatchUpdateStatusOptions struct {
JobId string `header:"-" url:"-" xml:"-"`
RequestedJobStatus string `url:"requestedJobStatus" header:"-" xml:"-"`
StatusUpdateReason string `url:"statusUpdateReason,omitempty" header:"-", xml:"-"`
StatusUpdateReason string `url:"statusUpdateReason,omitempty" header:"-" xml:"-"`
}
type BatchUpdateStatusResult struct {
XMLName xml.Name `xml:"UpdateJobStatusResult"`

102
bucket_test.go

@ -152,14 +152,14 @@ func TestBucketService_Head(t *testing.T) {
}
func TestBucketService_GetObjectVersions(t *testing.T) {
setup()
defer teardown()
setup()
defer teardown()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
w.WriteHeader(http.StatusOK)
vs := values{
"versions": "",
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
w.WriteHeader(http.StatusOK)
vs := values{
"versions": "",
"delimiter": "/",
}
testFormValues(t, r, vs)
@ -203,51 +203,51 @@ func TestBucketService_GetObjectVersions(t *testing.T) {
</Owner>
</DeleteMarker>
</ListVersionsResult>`)
})
})
want := &BucketGetObjectVersionsResult {
XMLName: xml.Name { Local: "ListVersionsResult" },
Name: "examplebucket-1250000000",
MaxKeys: 1000,
IsTruncated: false,
Delimiter: "/",
CommonPrefixes: []string {
"example-folder-1/",
"example-folder-2/",
},
Version: []ListVersionsResultVersion {
{
Key: "example-object-1.jpg",
VersionId: "MTg0NDUxNzgxMjEzNTU3NTk1Mjg",
IsLatest: true,
LastModified: "2019-08-16T10:45:53.000Z",
ETag: "\"5d1143df07a17b23320d0da161e2819e\"",
Size: 30,
StorageClass: "STANDARD",
Owner: &Owner {
ID: "1250000000",
DisplayName: "1250000000",
},
},
},
DeleteMarker: []ListVersionsResultDeleteMarker {
{
Key: "example-object-1.jpg",
VersionId: "MTg0NDUxNzgxMjEzNjE1OTcxMzM",
IsLatest: false,
LastModified: "2019-08-16T10:45:47.000Z",
Owner: &Owner {
ID: "1250000000",
DisplayName: "1250000000",
},
},
},
}
opt := &BucketGetObjectVersionsOptions {
Delimiter: "/",
}
res, _, err := client.Bucket.GetObjectVersions(context.Background(), opt)
if err != nil {
want := &BucketGetObjectVersionsResult{
XMLName: xml.Name{Local: "ListVersionsResult"},
Name: "examplebucket-1250000000",
MaxKeys: 1000,
IsTruncated: false,
Delimiter: "/",
CommonPrefixes: []string{
"example-folder-1/",
"example-folder-2/",
},
Version: []ListVersionsResultVersion{
{
Key: "example-object-1.jpg",
VersionId: "MTg0NDUxNzgxMjEzNTU3NTk1Mjg",
IsLatest: true,
LastModified: "2019-08-16T10:45:53.000Z",
ETag: "\"5d1143df07a17b23320d0da161e2819e\"",
Size: 30,
StorageClass: "STANDARD",
Owner: &Owner{
ID: "1250000000",
DisplayName: "1250000000",
},
},
},
DeleteMarker: []ListVersionsResultDeleteMarker{
{
Key: "example-object-1.jpg",
VersionId: "MTg0NDUxNzgxMjEzNjE1OTcxMzM",
IsLatest: false,
LastModified: "2019-08-16T10:45:47.000Z",
Owner: &Owner{
ID: "1250000000",
DisplayName: "1250000000",
},
},
},
}
opt := &BucketGetObjectVersionsOptions{
Delimiter: "/",
}
res, _, err := client.Bucket.GetObjectVersions(context.Background(), opt)
if err != nil {
t.Fatalf("Bucket.GetObjectVersions returned error: %v", err)
}
if !reflect.DeepEqual(res, want) {

17
ci.go

@ -48,13 +48,14 @@ type PicImageInfo struct {
Quality int `xml:"Quality,omitempty"`
}
type PicProcessObject struct {
Key string `xml:"Key,omitempty"`
Location string `xml:"Location,omitempty"`
Format string `xml:"Format,omitempty"`
Width int `xml:"Width,omitempty"`
Height int `xml:"Height,omitempty"`
Size int `xml:"Size,omitempty"`
Quality int `xml:"Quality,omitempty"`
Key string `xml:"Key,omitempty"`
Location string `xml:"Location,omitempty"`
Format string `xml:"Format,omitempty"`
Width int `xml:"Width,omitempty"`
Height int `xml:"Height,omitempty"`
Size int `xml:"Size,omitempty"`
Quality int `xml:"Quality,omitempty"`
WatermarkStatus int `xml:"WatermarkStatus,omitempty"`
}
type picOperationsHeader struct {
@ -171,7 +172,7 @@ type VideoAuditingJobDetail struct {
CreationTime string `xml:",omitempty"`
Object string `xml:",omitempty"`
SnapshotCount string `xml:",omitempty"`
result int `xml:",omitempty"`
Result int `xml:",omitempty"`
PornInfo *RecognitionInfo `xml:",omitempty"`
TerrorismInfo *RecognitionInfo `xml:",omitempty"`
PoliticsInfo *RecognitionInfo `xml:",omitempty"`

271
ci_doc.go

@ -0,0 +1,271 @@
package cos
import (
"context"
"encoding/xml"
"net/http"
)
type DocProcessJobInput struct {
Object string `xml:"Object,omitempty"`
}
type DocProcessJobOutput struct {
Region string `xml:"Region,omitempty"`
Bucket string `xml:"Bucket,omitempty"`
Object string `xml:"Object,omitempty"`
}
type DocProcessJobDocProcess struct {
SrcType string `xml:"SrcType,omitempty"`
TgtType string `xml:"TgtType,omitempty"`
SheetId int `xml:"SheetId,omitempty"`
StartPage int `xml:"StartPage,omitempty"`
EndPage int `xml:"EndPage,omitempty"`
ImageParams string `xml:"ImageParams,omitempty"`
DocPassword string `xml:"DocPassword,omitempty"`
Comments int `xml:"Comments,omitempty"`
PaperDirection int `xml:"PaperDirection,omitempty"`
Quality int `xml:"Quality,omitempty"`
Zoom int `xml:"Zoom,omitempty"`
}
type DocProcessJobDocProcessResult struct {
FailPageCount int `xml:",omitempty"`
SuccPageCount int `xml:"SuccPageCount,omitempty"`
TaskId string `xml:"TaskId,omitempty"`
TgtType string `xml:"TgtType,omitempty"`
TotalPageCount int `xml:"TotalPageCount,omitempty"`
PageInfo struct {
PageNo int `xml:"PageNo,omitempty"`
TgtUri string `xml:"TgtUri,omitempty"`
} `xml:"PageInfo,omitempty"`
}
type DocProcessJobOperation struct {
Output *DocProcessJobOutput `xml:"Output,omitempty"`
DocProcess *DocProcessJobDocProcess `xml:"DocProcess,omitempty"`
DocProcessResult *DocProcessJobDocProcessResult `xml:"DocProcessResult,omitempty"`
}
type DocProcessJobDetail struct {
Code string `xml:"Code,omitempty"`
Message string `xml:"Message,omitempty"`
JobId string `xml:"JobId,omitempty"`
Tag string `xml:"Tag,omitempty"`
State string `xml:"State,omitempty"`
CreationTime string `xml:"CreationTime,omitempty"`
QueueId string `xml:"QueueId,omitempty"`
Input *DocProcessJobInput `xml:"Input,omitempty"`
Operation *DocProcessJobOperation `xml:"Operation,omitempty"`
}
type CreateDocProcessJobsOptions struct {
XMLName xml.Name `xml:"Request"`
Tag string `xml:"Tag,omitempty"`
Input *DocProcessJobInput `xml:"Input,omitempty"`
Operation *DocProcessJobOperation `xml:"Operation,omitempty"`
QueueId string `xml:"QueueId,omitempty"`
}
type CreateDocProcessJobsResult struct {
XMLName xml.Name `xml:"Response"`
JobsDetail DocProcessJobDetail `xml:"JobsDetail,omitempty"`
}
func (s *CIService) CreateDocProcessJobs(ctx context.Context, opt *CreateDocProcessJobsOptions) (*CreateDocProcessJobsResult, *Response, error) {
var res CreateDocProcessJobsResult
sendOpt := sendOptions{
baseURL: s.client.BaseURL.CIURL,
uri: "/doc_jobs",
method: http.MethodPost,
body: opt,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
return &res, resp, err
}
type DescribeDocProcessJobResult struct {
XMLName xml.Name `xml:"Response"`
JobsDetail *DocProcessJobDetail `xml:"JobsDetail,omitempty"`
NonExistJobIds string `xml:"NonExistJobIds,omitempty"`
}
func (s *CIService) DescribeDocProcessJob(ctx context.Context, jobid string) (*DescribeDocProcessJobResult, *Response, error) {
var res DescribeDocProcessJobResult
sendOpt := sendOptions{
baseURL: s.client.BaseURL.CIURL,
uri: "/doc_jobs/" + jobid,
method: http.MethodGet,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
return &res, resp, err
}
type DescribeDocProcessJobsOptions struct {
QueueId string `url:"queueId,omitempty"`
Tag string `url:"tag,omitempty"`
OrderByTime string `url:"orderByTime,omitempty"`
NextToken string `url:"nextToken,omitempty"`
Size int `url:"size,omitempty"`
States string `url:"states,omitempty"`
StartCreationTime string `url:"startCreationTime,omitempty"`
EndCreationTime string `url:"endCreationTime,omitempty"`
}
type DescribeDocProcessJobsResult struct {
XMLName xml.Name `xml:"Response"`
JobsDetail []DocProcessJobDetail `xml:"JobsDetail,omitempty"`
NextToken string `xml:"NextToken,omitempty"`
}
func (s *CIService) DescribeDocProcessJobs(ctx context.Context, opt *DescribeDocProcessJobsOptions) (*DescribeDocProcessJobsResult, *Response, error) {
var res DescribeDocProcessJobsResult
sendOpt := sendOptions{
baseURL: s.client.BaseURL.CIURL,
uri: "/doc_jobs",
optQuery: opt,
method: http.MethodGet,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
return &res, resp, err
}
type DescribeDocProcessQueuesOptions struct {
QueueIds string `url:"queueIds,omitempty"`
State string `url:"state,omitempty"`
PageNumber int `url:"pageNumber,omitempty"`
PageSize int `url:"pageSize,omitempty"`
}
type DescribeDocProcessQueuesResult struct {
XMLName xml.Name `xml:"Response"`
RequestId string `xml:"RequestId,omitempty"`
TotalCount int `xml:"TotalCount,omitempty"`
PageNumber int `xml:"PageNumber,omitempty"`
PageSize int `xml:"PageSize,omitempty"`
QueueList []DocProcessQueue `xml:"QueueList,omitempty"`
NonExistPIDs []string `xml:"NonExistPIDs,omitempty"`
}
type DocProcessQueue struct {
QueueId string `xml:"QueueId,omitempty"`
Name string `xml:"Name,omitempty"`
State string `xml:"State,omitempty"`
MaxSize int `xml:"MaxSize,omitempty"`
MaxConcurrent int `xml:"MaxConcurrent,omitempty"`
UpdateTime string `xml:"UpdateTime,omitempty"`
CreateTime string `xml:"CreateTime,omitempty"`
NotifyConfig *DocProcessQueueNotifyConfig `xml:"NotifyConfig,omitempty"`
}
type DocProcessQueueNotifyConfig struct {
Url string `xml:"Url,omitempty"`
State string `xml:"State,omitempty"`
Type string `xml:"Type,omitempty"`
Event string `xml:"Event,omitempty"`
}
func (s *CIService) DescribeDocProcessQueues(ctx context.Context, opt *DescribeDocProcessQueuesOptions) (*DescribeDocProcessQueuesResult, *Response, error) {
var res DescribeDocProcessQueuesResult
sendOpt := sendOptions{
baseURL: s.client.BaseURL.CIURL,
uri: "/docqueue",
optQuery: opt,
method: http.MethodGet,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
return &res, resp, err
}
type UpdateDocProcessQueueOptions struct {
XMLName xml.Name `xml:"Request"`
Name string `xml:"Name,omitempty"`
QueueID string `xml:"QueueID,omitempty"`
State string `xml:"State,omitempty"`
NotifyConfig *DocProcessQueueNotifyConfig `xml:"NotifyConfig,omitempty"`
}
type UpdateDocProcessQueueResult struct {
XMLName xml.Name `xml:"Response"`
RequestId string `xml:"RequestId"`
Queue *DocProcessQueue `xml:"Queue"`
}
func (s *CIService) UpdateDocProcessQueue(ctx context.Context, opt *UpdateDocProcessQueueOptions) (*UpdateDocProcessQueueResult, *Response, error) {
var res UpdateDocProcessQueueResult
sendOpt := sendOptions{
baseURL: s.client.BaseURL.CIURL,
uri: "/docqueue/" + opt.QueueID,
body: opt,
method: http.MethodPut,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
return &res, resp, err
}
type DescribeDocProcessBucketsOptions struct {
Regions string `url:"regions,omitempty"`
BucketNames string `url:"bucketNames,omitempty"`
BucketName string `url:"bucketName,omitempty"`
PageNumber int `url:"pageNumber,omitempty"`
PageSize int `url:"pageSize,omitempty"`
}
type DescribeDocProcessBucketsResult struct {
XMLName xml.Name `xml:"Response"`
RequestId string `xml:"RequestId,omitempty"`
TotalCount int `xml:"TotalCount,omitempty"`
PageNumber int `xml:"PageNumber,omitempty"`
PageSize int `xml:"PageSize,omitempty"`
DocBucketList []DocProcessBucket `xml:"DocBucketList,omitempty"`
}
type DocProcessBucket struct {
BucketId string `xml:"BucketId,omitempty"`
Name string `xml:"Name,omitempty"`
Region string `xml:"Region,omitempty"`
CreateTime string `xml:"CreateTime,omitempty"`
AliasBucketId string `xml:"AliasBucketId,omitempty"`
}
func (s *CIService) DescribeDocProcessBuckets(ctx context.Context, opt *DescribeDocProcessBucketsOptions) (*DescribeDocProcessBucketsResult, *Response, error) {
var res DescribeDocProcessBucketsResult
sendOpt := sendOptions{
baseURL: s.client.BaseURL.CIURL,
uri: "/docbucket",
optQuery: opt,
method: http.MethodGet,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
return &res, resp, err
}
type DocPreviewOptions struct {
SrcType string `url:"srcType,omitempty"`
Page int `url:"page,omitempty"`
ImageParams string `url:"ImageParams,omitempty"`
Sheet int `url:"sheet,omitempty"`
DstType string `url:"dstType,omitempty"`
Password string `url:"password,omitempty"`
Comment int `url:"comment,omitempty"`
ExcelPaperDirection int `url:"excelPaperDirection,omitempty"`
Quality int `url:"quality,omitempty"`
Zoom int `url:"zoom,omitempty"`
}
func (s *CIService) DocPreview(ctx context.Context, name string, opt *DocPreviewOptions) (*Response, error) {
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/" + encodeURIComponent(name) + "?ci-process=doc-preview",
optQuery: opt,
method: http.MethodGet,
}
resp, err := s.client.send(ctx, &sendOpt)
return resp, err
}

2
cos.go

@ -22,7 +22,7 @@ import (
const (
// Version current go sdk version
Version = "0.7.12"
Version = "0.7.13"
userAgent = "cos-go-sdk-v5/" + Version
contentTypeXML = "application/xml"
defaultServiceBaseURL = "http://service.cos.myqcloud.com"

14
example/bucket/intelligenttiering.go

@ -48,13 +48,13 @@ func main() {
},
})
opt := &cos.BucketPutIntelligentTieringOptions {
Status: "Enabled",
Transition: &cos.BucketIntelligentTieringTransition {
Days: 30,
},
}
_, err := c.Bucket.PutIntelligentTiering(context.Background(), opt)
opt := &cos.BucketPutIntelligentTieringOptions{
Status: "Enabled",
Transition: &cos.BucketIntelligentTieringTransition{
Days: 30,
},
}
_, err := c.Bucket.PutIntelligentTiering(context.Background(), opt)
log_status(err)
res, _, err := c.Bucket.GetIntelligentTiering(context.Background())
log_status(err)

132
example/object/ci_doc_process.go

@ -0,0 +1,132 @@
package main
import (
"context"
"fmt"
"io"
"net/http"
"net/url"
"os"
"github.com/tencentyun/cos-go-sdk-v5"
"github.com/tencentyun/cos-go-sdk-v5/debug"
)
func log_status(err error) {
if err == nil {
return
}
if cos.IsNotFoundError(err) {
// WARN
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)
fmt.Printf("ERROR: Resource: %v\n", e.Resource)
fmt.Printf("ERROR: RequestId: %v\n", e.RequestID)
// ERROR
} else {
fmt.Printf("ERROR: %v\n", err)
// ERROR
}
}
func main() {
u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com")
cu, _ := url.Parse("https://test-1259654469.ci.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u, CIURL: cu}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("COS_SECRETID"),
SecretKey: os.Getenv("COS_SECRETKEY"),
Transport: &debug.DebugRequestTransport{
RequestHeader: true,
// Notice when put a large file and set need the request body, might happend out of memory error.
RequestBody: true,
ResponseHeader: true,
ResponseBody: true,
},
},
})
// 1、UpdateDocProcessQueue
updateQueueOpt := &cos.UpdateDocProcessQueueOptions{
Name: "queue-doc-process-1",
QueueID: "p111a8dd208104ce3b11c78398f658ca8",
State: "Active",
NotifyConfig: &cos.DocProcessQueueNotifyConfig{
State: "Off",
},
}
updateQueueRes, _, err := c.CI.UpdateDocProcessQueue(context.Background(), updateQueueOpt)
log_status(err)
fmt.Printf("%+v\n", updateQueueRes)
// 2、DescribeDocProcessQueues
DescribeQueueOpt := &cos.DescribeDocProcessQueuesOptions{
QueueIds: "p111a8dd208104ce3b11c78398f658ca8,p4318f85d2aa14c43b1dba6f9b78be9b3,aacb2bb066e9c4478834d4196e76c49d3",
PageNumber: 1,
PageSize: 2,
}
DescribeQueueRes, _, err := c.CI.DescribeDocProcessQueues(context.Background(), DescribeQueueOpt)
log_status(err)
fmt.Printf("%+v\n", DescribeQueueRes)
// 3、DescribeDocProcessBuckets
BucketsOpt := &cos.DescribeDocProcessBucketsOptions{
Regions: "All",
}
BucketsRes, _, err := c.CI.DescribeDocProcessBuckets(context.Background(), BucketsOpt)
log_status(err)
fmt.Printf("%+v\n", BucketsRes)
// 4、CreateDocProcessJobs
createJobOpt := &cos.CreateDocProcessJobsOptions{
Tag: "DocProcess",
Input: &cos.DocProcessJobInput{
Object: "form.pdf",
},
Operation: &cos.DocProcessJobOperation{
Output: &cos.DocProcessJobOutput{
Region: "ap-guangzhou",
Object: "test-doc${Number}",
Bucket: "test-1259654469",
},
DocProcess: &cos.DocProcessJobDocProcess{
TgtType: "png",
StartPage: 1,
EndPage: -1,
ImageParams: "watermark/1/image/aHR0cDovL3Rlc3QwMDUtMTI1MTcwNDcwOC5jb3MuYXAtY2hvbmdxaW5nLm15cWNsb3VkLmNvbS8xLmpwZw==/gravity/southeast",
},
},
QueueId: "p111a8dd208104ce3b11c78398f658ca8",
}
createJobRes, _, err := c.CI.CreateDocProcessJobs(context.Background(), createJobOpt)
log_status(err)
fmt.Printf("%+v\n", createJobRes.JobsDetail)
// 5、DescribeDocProcessJob
DescribeJobRes, _, err := c.CI.DescribeDocProcessJob(context.Background(), createJobRes.JobsDetail.JobId)
log_status(err)
fmt.Printf("%+v\n", DescribeJobRes.JobsDetail)
// 6、DescribeDocProcessJobs
DescribeJobsOpt := &cos.DescribeDocProcessJobsOptions{
QueueId: "p111a8dd208104ce3b11c78398f658ca8",
Tag: "DocProcess",
}
DescribeJobsRes, _, err := c.CI.DescribeDocProcessJobs(context.Background(), DescribeJobsOpt)
log_status(err)
fmt.Printf("%+v\n", DescribeJobsRes)
// 7、doc-preview
opt := &cos.DocPreviewOptions{
Page: 1,
}
resp, err := c.CI.DocPreview(context.Background(), "form.pdf", opt)
log_status(err)
fd, _ := os.OpenFile("form.pdf", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0660)
io.Copy(fd, resp.Body)
fd.Close()
}

2
object_test.go

@ -129,7 +129,7 @@ func TestObjectService_Options(t *testing.T) {
})
opt := &ObjectOptionsOptions{
Origin: "www.qq.com",
Origin: "www.qq.com",
AccessControlRequestMethod: "PUT",
}

8
service_test.go

@ -48,13 +48,13 @@ func TestServiceService_Get(t *testing.T) {
},
Buckets: []Bucket{
{
Name: "huadong-1253846586",
Region: "ap-shanghai",
Name: "huadong-1253846586",
Region: "ap-shanghai",
CreationDate: "2017-06-16T13:08:28Z",
},
{
Name: "huanan-1253846586",
Region: "ap-guangzhou",
Name: "huanan-1253846586",
Region: "ap-guangzhou",
CreationDate: "2017-06-10T09:00:07Z",
},
},

Loading…
Cancel
Save