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  }