github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/apis/async_fetch_object/api.go (about) 1 // THIS FILE IS GENERATED BY api-generator, DO NOT EDIT DIRECTLY! 2 3 // 从指定 URL 抓取资源,并将该资源存储到指定空间中。每次只抓取一个文件,抓取时可以指定保存空间名和最终资源名 4 package async_fetch_object 5 6 import ( 7 "encoding/json" 8 9 credentials "github.com/qiniu/go-sdk/v7/storagev2/credentials" 10 errors "github.com/qiniu/go-sdk/v7/storagev2/errors" 11 ) 12 13 // 调用 API 所用的请求 14 type Request struct { 15 Credentials credentials.CredentialsProvider // 鉴权参数,用于生成鉴权凭证,如果为空,则使用 HTTPClientOptions 中的 CredentialsProvider 16 Url string // 需要抓取的 URL,支持设置多个用于高可用,以’;'分隔,当指定多个 URL 时可以在前一个 URL 抓取失败时重试下一个 17 Bucket string // 所在区域的存储空间 18 Host string // 从指定 URL 下载数据时使用的 Host 19 Key string // 对象名称,如果不传,则默认为文件的哈希值 20 Md5 string // 文件 MD5,传入以后会在存入存储时对文件做校验,校验失败则不存入指定空间 21 Etag string // 对象内容的 ETag,传入以后会在存入存储时对文件做校验,校验失败则不存入指定空间 22 CallbackUrl string // 回调 URL 23 CallbackBody string // 回调负荷,如果 callback_url 不为空则必须指定 24 CallbackBodyType string // 回调负荷内容类型,默认为 "application/x-www-form-urlencoded" 25 CallbackHost string // 回调时使用的 Host 26 FileType int64 // 存储文件类型 `0`: 标准存储(默认),`1`: 低频存储,`2`: 归档存储 27 IgnoreSameKey bool // 如果空间中已经存在同名文件则放弃本次抓取(仅对比对象名称,不校验文件内容) 28 } 29 30 // 要抓取的资源信息 31 type ( 32 NewFetchTaskParams = Request 33 jsonRequest struct { 34 Url string `json:"url"` // 需要抓取的 URL,支持设置多个用于高可用,以’;'分隔,当指定多个 URL 时可以在前一个 URL 抓取失败时重试下一个 35 Bucket string `json:"bucket"` // 所在区域的存储空间 36 Host string `json:"host,omitempty"` // 从指定 URL 下载数据时使用的 Host 37 Key string `json:"key,omitempty"` // 对象名称,如果不传,则默认为文件的哈希值 38 Md5 string `json:"md5,omitempty"` // 文件 MD5,传入以后会在存入存储时对文件做校验,校验失败则不存入指定空间 39 Etag string `json:"etag,omitempty"` // 对象内容的 ETag,传入以后会在存入存储时对文件做校验,校验失败则不存入指定空间 40 CallbackUrl string `json:"callbackurl,omitempty"` // 回调 URL 41 CallbackBody string `json:"callbackbody,omitempty"` // 回调负荷,如果 callback_url 不为空则必须指定 42 CallbackBodyType string `json:"callbackbodytype,omitempty"` // 回调负荷内容类型,默认为 "application/x-www-form-urlencoded" 43 CallbackHost string `json:"callbackhost,omitempty"` // 回调时使用的 Host 44 FileType int64 `json:"file_type"` // 存储文件类型 `0`: 标准存储(默认),`1`: 低频存储,`2`: 归档存储 45 IgnoreSameKey bool `json:"ignore_same_key,omitempty"` // 如果空间中已经存在同名文件则放弃本次抓取(仅对比对象名称,不校验文件内容) 46 } 47 ) 48 49 func (j *Request) MarshalJSON() ([]byte, error) { 50 if err := j.validate(); err != nil { 51 return nil, err 52 } 53 return json.Marshal(&jsonRequest{Url: j.Url, Bucket: j.Bucket, Host: j.Host, Key: j.Key, Md5: j.Md5, Etag: j.Etag, CallbackUrl: j.CallbackUrl, CallbackBody: j.CallbackBody, CallbackBodyType: j.CallbackBodyType, CallbackHost: j.CallbackHost, FileType: j.FileType, IgnoreSameKey: j.IgnoreSameKey}) 54 } 55 56 func (j *Request) UnmarshalJSON(data []byte) error { 57 var nj jsonRequest 58 if err := json.Unmarshal(data, &nj); err != nil { 59 return err 60 } 61 j.Url = nj.Url 62 j.Bucket = nj.Bucket 63 j.Host = nj.Host 64 j.Key = nj.Key 65 j.Md5 = nj.Md5 66 j.Etag = nj.Etag 67 j.CallbackUrl = nj.CallbackUrl 68 j.CallbackBody = nj.CallbackBody 69 j.CallbackBodyType = nj.CallbackBodyType 70 j.CallbackHost = nj.CallbackHost 71 j.FileType = nj.FileType 72 j.IgnoreSameKey = nj.IgnoreSameKey 73 return nil 74 } 75 76 func (j *Request) validate() error { 77 if j.Url == "" { 78 return errors.MissingRequiredFieldError{Name: "Url"} 79 } 80 if j.Bucket == "" { 81 return errors.MissingRequiredFieldError{Name: "Bucket"} 82 } 83 return nil 84 } 85 86 // 获取 API 所用的响应 87 type Response struct { 88 Id string // 异步任务 ID 89 QueuedTasksCount int64 // 当前任务前面的排队任务数量,`0` 表示当前任务正在进行,`-1` 表示任务已经至少被处理过一次(可能会进入重试逻辑) 90 } 91 92 // 返回的异步任务信息 93 type ( 94 NewFetchTaskInfo = Response 95 jsonResponse struct { 96 Id string `json:"id"` // 异步任务 ID 97 QueuedTasksCount int64 `json:"wait"` // 当前任务前面的排队任务数量,`0` 表示当前任务正在进行,`-1` 表示任务已经至少被处理过一次(可能会进入重试逻辑) 98 } 99 ) 100 101 func (j *Response) MarshalJSON() ([]byte, error) { 102 if err := j.validate(); err != nil { 103 return nil, err 104 } 105 return json.Marshal(&jsonResponse{Id: j.Id, QueuedTasksCount: j.QueuedTasksCount}) 106 } 107 108 func (j *Response) UnmarshalJSON(data []byte) error { 109 var nj jsonResponse 110 if err := json.Unmarshal(data, &nj); err != nil { 111 return err 112 } 113 j.Id = nj.Id 114 j.QueuedTasksCount = nj.QueuedTasksCount 115 return nil 116 } 117 118 func (j *Response) validate() error { 119 if j.Id == "" { 120 return errors.MissingRequiredFieldError{Name: "Id"} 121 } 122 if j.QueuedTasksCount == 0 { 123 return errors.MissingRequiredFieldError{Name: "QueuedTasksCount"} 124 } 125 return nil 126 }