You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
packer/vendor/github.com/ufilesdk-dev/ufile-gosdk/bucket.go

184 lines
5.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package ufsdk
import (
"encoding/json"
"errors"
"net/http"
"net/url"
"strconv"
)
type response interface {
Error() error
}
//BucketResponse 用于 Bucket 模块返回的数据。
type BucketResponse struct {
RetCode int `json:"RetCode,omitempty"`
Action string `json:"Action,omitempty"`
BucketName string `json:"BucketName,omitempty"`
BucketID string `json:"BucketId,omitempty"`
Message string `json:"Message,omitempty"`
}
func (b BucketResponse) Error() error {
if b.RetCode != 0 {
return errors.New(b.Message)
}
return nil
}
func (b BucketResponse) String() string {
return structPrettyStr(b)
}
//DomainSet 用于 BucketDataSet 里面的 Domain 字段
type DomainSet struct {
Src []string `json:"Src,omitempty"`
Cdn []string `json:"Cdn,omitempty"`
CustomSrc []string `json:"CustomSrc,omitempty"`
CustomCdn []string `json:"CustomCdn,omitempty"`
}
//BucketDataSet 用于 BucketListResponse 里面的 DataSet 字段
type BucketDataSet struct {
BucketName string `json:"BucketName,omitempty"`
BucketID string `json:"BucketId,omitempty"`
Domain DomainSet `json:"Domain,omitempty"`
Type string `json:"Type,omitempty"`
CreateTime int `json:"CreateTime,omitempty"`
ModifyTime int `json:"ModifyTime,omitempty"`
CdnDomainID []string `json:"CdnDomainId,omitempty"`
Biz string `json:"Biz,omitempty"`
Region string `json:"Region,omitempty"`
HasUserDomain int `json:"HasUserDomain,omitempty"`
}
//BucketListResponse 用于 DescribeBucket 返回的数据。
type BucketListResponse struct {
RetCode int `json:"RetCode,omitempty"`
Action string `json:"Action,omitempty"`
Message string `json:"Message,omitempty"`
DataSet []BucketDataSet `json:"DataSet,omitempty"`
}
func (b BucketListResponse) Error() error {
if b.RetCode != 0 {
return errors.New(b.Message)
}
return nil
}
//String 把 BucketListResponse 里面的字段格式化。
func (b BucketListResponse) String() string {
return structPrettyStr(b)
}
//CreateBucket 创建一个 bucket, bucketName 必须全部为小写字母,不能带符号和特殊字符。
//
//region 表示 ufile 所在的可用区,目前支持北京,香港,广州,上海二,雅加达,洛杉矶。一下是可用区值的映射:
//
//北京 cn-bj
//
//广州 cn-gd
//
//可用区以控制台列出来的为准,更多可用区具体的值在 https://docs.ucloud.cn/api/summary/regionlist 查看。
//
//bucketType 可以填 public公有空间 和 private私有空间
//projectID bucket 所在的项目 ID可为空。
func (u *UFileRequest) CreateBucket(bucketName, region, bucketType, projectID string) (bucket BucketResponse, err error) {
query := url.Values{}
query.Add("Action", "CreateBucket")
query.Add("BucketName", bucketName)
query.Add("Type", bucketType)
query.Add("Region", region)
if projectID != "" {
query.Add("ProjectId", projectID)
}
err = u.bucketRequest(query, &bucket)
return
}
//DeleteBucket 删除一个 bucket如果成功status code 会返回 204 no-content
func (u *UFileRequest) DeleteBucket(bucketName, projectID string) (bucket BucketResponse, err error) {
query := url.Values{}
query.Add("Action", "DeleteBucket")
query.Add("BucketName", bucketName)
if projectID != "" {
query.Add("ProjectId", projectID)
}
err = u.bucketRequest(query, &bucket)
return
}
//UpdateBucket 更新一个 bucket你可以改 bucket 的类型(私有或公有)和 项目 ID。
//bucketType 填公有public或私有private
//projectID 没有可以填空("")。
func (u *UFileRequest) UpdateBucket(bucketName, bucketType, projectID string) (bucket BucketResponse, err error) {
query := url.Values{}
query.Add("Action", "UpdateBucket")
query.Add("BucketName", bucketName)
query.Add("Type", bucketType)
if projectID != "" {
query.Add("ProjectId", projectID)
}
err = u.bucketRequest(query, &bucket)
return
}
//DescribeBucket 获取 bucket 的详细信息,如果 bucketName 为空,返回当前账号下所有的 bucket。
//limit 是限制返回的 bucket 列表数量。
//offset 是列表的偏移量,默认为 0。
//projectID 可为空。
func (u *UFileRequest) DescribeBucket(bucketName string, offset, limit int, projectID string) (list BucketListResponse, err error) {
query := url.Values{}
query.Add("Action", "DescribeBucket")
if bucketName != "" {
query.Add("BucketName", bucketName)
}
//offset default is 0
query.Add("Offset", strconv.Itoa(offset))
if limit == 0 {
limit = 20
}
query.Add("Limit", strconv.Itoa(limit))
if projectID != "" {
query.Add("ProjectId", projectID)
}
err = u.bucketRequest(query, &list)
return
}
func (u *UFileRequest) bucketRequest(query url.Values, data response) error {
reqURL := u.genBucketURL(query)
req, err := http.NewRequest("GET", reqURL, nil)
if err != nil {
return err
}
resp, err := u.Client.Do(req)
if err != nil {
return err
}
err = u.responseParse(resp)
if err != nil {
return err
}
err = json.Unmarshal(u.LastResponseBody, data)
if err != nil {
return err
}
return data.Error()
}
func (u *UFileRequest) genBucketURL(query url.Values) string {
u.baseURL.RawQuery = u.Auth.AuthorizationBucketMgr(query)
return u.baseURL.String()
}