oss/api_op_bucket.go (845 lines of code) (raw):
package oss
import (
"context"
"encoding/xml"
"net/url"
"strings"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/signer"
)
type PutBucketRequest struct {
// The name of the bucket to create.
Bucket *string `input:"host,bucket,required"`
// The access control list (ACL) of the bucket.
Acl BucketACLType `input:"header,x-oss-acl"`
// The ID of the resource group.
ResourceGroupId *string `input:"header,x-oss-resource-group-id"`
// The configuration information for the bucket.
CreateBucketConfiguration *CreateBucketConfiguration `input:"body,CreateBucketConfiguration,xml"`
RequestCommon
}
type CreateBucketConfiguration struct {
XMLName xml.Name `xml:"CreateBucketConfiguration"`
// The storage class of the bucket.
StorageClass StorageClassType `xml:"StorageClass,omitempty"`
// The redundancy type of the bucket.
DataRedundancyType DataRedundancyType `xml:"DataRedundancyType,omitempty"`
}
type PutBucketResult struct {
ResultCommon
}
// PutBucket Creates a bucket.
func (c *Client) PutBucket(ctx context.Context, request *PutBucketRequest, optFns ...func(*Options)) (*PutBucketResult, error) {
var err error
if request == nil {
request = &PutBucketRequest{}
}
input := &OperationInput{
OpName: "PutBucket",
Method: "PUT",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeXML,
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &PutBucketResult{}
if err = c.unmarshalOutput(result, output, discardBody); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type DeleteBucketRequest struct {
// The name of the bucket to delete.
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type DeleteBucketResult struct {
ResultCommon
}
// DeleteBucket Deletes a bucket.
func (c *Client) DeleteBucket(ctx context.Context, request *DeleteBucketRequest, optFns ...func(*Options)) (*DeleteBucketResult, error) {
var err error
if request == nil {
request = &DeleteBucketRequest{}
}
input := &OperationInput{
OpName: "DeleteBucket",
Method: "DELETE",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &DeleteBucketResult{}
if err = c.unmarshalOutput(result, output, discardBody); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type ListObjectsRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
// The character that is used to group objects by name. If you specify the delimiter parameter in the request,
// the response contains the CommonPrefixes parameter. The objects whose names contain the same string from
// the prefix to the next occurrence of the delimiter are grouped as a single result element in CommonPrefixes.
Delimiter *string `input:"query,delimiter"`
// The encoding type of the content in the response. Valid value: url
EncodingType *string `input:"query,encoding-type"`
// The name of the object after which the ListObjects (GetBucket) operation starts.
// If this parameter is specified, objects whose names are alphabetically greater than the marker value are returned.
Marker *string `input:"query,marker"`
// The maximum number of objects that you want to return. If the list operation cannot be complete at a time
// because the max-keys parameter is specified, the NextMarker element is included in the response as the marker
// for the next list operation.
MaxKeys int32 `input:"query,max-keys"`
// The prefix that the names of the returned objects must contain.
Prefix *string `input:"query,prefix"`
// To indicate that the requester is aware that the request and data download will incur costs
RequestPayer *string `input:"header,x-oss-request-payer"`
RequestCommon
}
type ListObjectsResult struct {
// The name of the bucket.
Name *string `xml:"Name"`
// The prefix contained in the returned object names.
Prefix *string `xml:"Prefix"`
// The name of the object after which the list operation begins.
Marker *string `xml:"Marker"`
// The maximum number of returned objects in the response.
MaxKeys int32 `xml:"MaxKeys"`
// The character that is used to group objects by name.
Delimiter *string `xml:"Delimiter"`
// Indicates whether the returned results are truncated.
// true indicates that not all results are returned this time.
// false indicates that all results are returned this time.
IsTruncated bool `xml:"IsTruncated"`
// The position from which the next list operation starts.
NextMarker *string `xml:"NextMarker"`
// The encoding type of the content in the response.
EncodingType *string `xml:"EncodingType"`
// The container that stores the metadata of the returned objects.
Contents []ObjectProperties `xml:"Contents"`
// If the Delimiter parameter is specified in the request, the response contains the CommonPrefixes element.
CommonPrefixes []CommonPrefix `xml:"CommonPrefixes"`
ResultCommon
}
type ObjectProperties struct {
// The name of the object.
Key *string `xml:"Key"`
// The type of the object. Valid values: Normal, Multipart and Appendable
Type *string `xml:"Type"`
// The size of the returned object. Unit: bytes.
Size int64 `xml:"Size"`
// The entity tag (ETag). An ETag is created when an object is created to identify the content of the object.
ETag *string `xml:"ETag"`
// The time when the returned objects were last modified.
LastModified *time.Time `xml:"LastModified"`
// The storage class of the object.
StorageClass *string `xml:"StorageClass"`
// The container that stores information about the bucket owner.
Owner *Owner `xml:"Owner"`
// The restoration status of the object.
RestoreInfo *string `xml:"RestoreInfo"`
// The time when the storage class of the object is converted to Cold Archive or Deep Cold Archive based on lifecycle rules.
TransitionTime *time.Time `xml:"TransitionTime"`
}
type Owner struct {
// The ID of the bucket owner.
ID *string `xml:"ID"`
// The name of the object owner.
DisplayName *string `xml:"DisplayName"`
}
type CommonPrefix struct {
// The prefix contained in the returned object names.
Prefix *string `xml:"Prefix"`
}
// ListObjects Lists the information about all objects in a bucket.
func (c *Client) ListObjects(ctx context.Context, request *ListObjectsRequest, optFns ...func(*Options)) (*ListObjectsResult, error) {
var err error
if request == nil {
request = &ListObjectsRequest{}
}
input := &OperationInput{
OpName: "ListObjects",
Method: "GET",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Parameters: map[string]string{
"encoding-type": "url",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5, enableNonStream); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &ListObjectsResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml, unmarshalEncodeType); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
func unmarshalEncodeType(result any, output *OperationOutput) error {
switch r := result.(type) {
case *ListObjectsResult:
if r.EncodingType != nil && strings.EqualFold(*r.EncodingType, "url") {
fields := []**string{&r.Prefix, &r.Marker, &r.Delimiter, &r.NextMarker}
var s string
var err error
for _, pp := range fields {
if pp != nil && *pp != nil {
if s, err = url.QueryUnescape(**pp); err != nil {
return err
}
*pp = Ptr(s)
}
}
for i := 0; i < len(r.Contents); i++ {
if *r.Contents[i].Key, err = url.QueryUnescape(*r.Contents[i].Key); err != nil {
return err
}
}
for i := 0; i < len(r.CommonPrefixes); i++ {
if *r.CommonPrefixes[i].Prefix, err = url.QueryUnescape(*r.CommonPrefixes[i].Prefix); err != nil {
return err
}
}
}
case *ListObjectsV2Result:
if r.EncodingType != nil && strings.EqualFold(*r.EncodingType, "url") {
fields := []**string{&r.Prefix, &r.StartAfter, &r.Delimiter, &r.ContinuationToken, &r.NextContinuationToken}
var s string
var err error
for _, pp := range fields {
if pp != nil && *pp != nil {
if s, err = url.QueryUnescape(**pp); err != nil {
return err
}
*pp = Ptr(s)
}
}
for i := 0; i < len(r.Contents); i++ {
if *r.Contents[i].Key, err = url.QueryUnescape(*r.Contents[i].Key); err != nil {
return err
}
}
for i := 0; i < len(r.CommonPrefixes); i++ {
if *r.CommonPrefixes[i].Prefix, err = url.QueryUnescape(*r.CommonPrefixes[i].Prefix); err != nil {
return err
}
}
}
case *DeleteMultipleObjectsResult:
if r.EncodingType != nil && strings.EqualFold(*r.EncodingType, "url") {
var err error
for i := 0; i < len(r.DeletedObjects); i++ {
if *r.DeletedObjects[i].Key, err = url.QueryUnescape(*r.DeletedObjects[i].Key); err != nil {
return err
}
}
}
case *InitiateMultipartUploadResult:
if r.EncodingType != nil && strings.EqualFold(*r.EncodingType, "url") {
var err error
if *r.Key, err = url.QueryUnescape(*r.Key); err != nil {
return err
}
}
case *CompleteMultipartUploadResult:
if r.EncodingType != nil && strings.EqualFold(*r.EncodingType, "url") {
var err error
if *r.Key, err = url.QueryUnescape(*r.Key); err != nil {
return err
}
}
case *ListMultipartUploadsResult:
if r.EncodingType != nil && strings.EqualFold(*r.EncodingType, "url") {
fields := []**string{&r.KeyMarker, &r.NextKeyMarker, &r.Prefix, &r.Delimiter}
var s string
var err error
for _, pp := range fields {
if pp != nil && *pp != nil {
if s, err = url.QueryUnescape(**pp); err != nil {
return err
}
*pp = Ptr(s)
}
}
for i := 0; i < len(r.Uploads); i++ {
if *r.Uploads[i].Key, err = url.QueryUnescape(*r.Uploads[i].Key); err != nil {
return err
}
}
}
case *ListPartsResult:
if r.EncodingType != nil && strings.EqualFold(*r.EncodingType, "url") {
fields := []**string{&r.Key}
var s string
var err error
for _, pp := range fields {
if pp != nil && *pp != nil {
if s, err = url.QueryUnescape(**pp); err != nil {
return err
}
*pp = Ptr(s)
}
}
}
case *ListObjectVersionsResult:
if r.EncodingType != nil && strings.EqualFold(*r.EncodingType, "url") {
fields := []**string{&r.Prefix, &r.KeyMarker, &r.Delimiter, &r.NextKeyMarker}
var s string
var err error
for _, pp := range fields {
if pp != nil && *pp != nil {
if s, err = url.QueryUnescape(**pp); err != nil {
return err
}
*pp = Ptr(s)
}
}
for i := 0; i < len(r.ObjectVersions); i++ {
if *r.ObjectVersions[i].Key, err = url.QueryUnescape(*r.ObjectVersions[i].Key); err != nil {
return err
}
}
for i := 0; i < len(r.ObjectDeleteMarkers); i++ {
if *r.ObjectDeleteMarkers[i].Key, err = url.QueryUnescape(*r.ObjectDeleteMarkers[i].Key); err != nil {
return err
}
}
for i := 0; i < len(r.ObjectVersionsDeleteMarkers); i++ {
if *r.ObjectVersionsDeleteMarkers[i].Key, err = url.QueryUnescape(*r.ObjectVersionsDeleteMarkers[i].Key); err != nil {
return err
}
}
for i := 0; i < len(r.CommonPrefixes); i++ {
if *r.CommonPrefixes[i].Prefix, err = url.QueryUnescape(*r.CommonPrefixes[i].Prefix); err != nil {
return err
}
}
}
}
return nil
}
type ListObjectsV2Request struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
// The character that is used to group objects by name. If you specify the delimiter parameter in the request,
// the response contains the CommonPrefixes parameter. The objects whose names contain the same string from
// the prefix to the next occurrence of the delimiter are grouped as a single result element in CommonPrefixes.
Delimiter *string `input:"query,delimiter"`
// The name of the object after which the ListObjectsV2 (GetBucketV2) operation starts.
// The objects are returned in alphabetical order of their names. The start-after parameter
// is used to list the returned objects by page.
// The value of the parameter must be less than 1,024 bytes in length.
// Even if the specified start-after value does not exist during a conditional query,
// the ListObjectsV2 (GetBucketV2) operation starts from the object whose name is alphabetically greater than the start-after value.
// By default, this parameter is left empty.
StartAfter *string `input:"query,start-after"`
// The token from which the ListObjectsV2 (GetBucketV2) operation must start.
// You can obtain the token from the NextContinuationToken parameter in the ListObjectsV2 (GetBucketV2) response.
ContinuationToken *string `input:"query,continuation-token"`
// The maximum number of objects that you want to return. If the list operation cannot be complete at a time
// because the max-keys parameter is specified, the NextMarker element is included in the response as the marker
// for the next list operation.
MaxKeys int32 `input:"query,max-keys"`
// The prefix that the names of the returned objects must contain.
Prefix *string `input:"query,prefix"`
// The encoding type of the content in the response. Valid value: url
EncodingType *string `input:"query,encoding-type"`
// Specifies whether to include information about the object owner in the response.
FetchOwner bool `input:"query,fetch-owner"`
// To indicate that the requester is aware that the request and data download will incur costs
RequestPayer *string `input:"header,x-oss-request-payer"`
RequestCommon
}
type ListObjectsV2Result struct {
// The name of the bucket.
Name *string `xml:"Name"`
// The prefix contained in the returned object names.
Prefix *string `xml:"Prefix"`
// If the StartAfter parameter is specified in the request, the response contains the StartAfter parameter.
StartAfter *string `xml:"StartAfter"`
// The maximum number of returned objects in the response.
MaxKeys int32 `xml:"MaxKeys"`
// The character that is used to group objects by name.
Delimiter *string `xml:"Delimiter"`
// Indicates whether the returned results are truncated.
// true indicates that not all results are returned this time.
// false indicates that all results are returned this time.
IsTruncated bool `xml:"IsTruncated"`
// If the ContinuationToken parameter is specified in the request, the response contains the ContinuationToken parameter.
ContinuationToken *string `xml:"ContinuationToken"`
// The name of the object from which the next ListObjectsV2 (GetBucketV2) operation starts.
// The NextContinuationToken value is used as the ContinuationToken value to query subsequent results.
NextContinuationToken *string `xml:"NextContinuationToken"`
// The encoding type of the content in the response.
EncodingType *string `xml:"EncodingType"`
// The container that stores the metadata of the returned objects.
Contents []ObjectProperties `xml:"Contents"`
// If the Delimiter parameter is specified in the request, the response contains the CommonPrefixes element.
CommonPrefixes []CommonPrefix `xml:"CommonPrefixes"`
// The number of objects returned for this request. If Delimiter is specified, KeyCount is the sum of the values of Key and CommonPrefixes.
KeyCount int `xml:"KeyCount"`
// The time when the storage class of the object is converted to Cold Archive or Deep Cold Archive based on lifecycle rules.
TransitionTime *time.Time `xml:"TransitionTime"`
ResultCommon
}
// ListObjectsV2 Queries information about all objects in a bucket.
func (c *Client) ListObjectsV2(ctx context.Context, request *ListObjectsV2Request, optFns ...func(*Options)) (*ListObjectsV2Result, error) {
var err error
if request == nil {
request = &ListObjectsV2Request{}
}
input := &OperationInput{
OpName: "ListObjectsV2",
Method: "GET",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Parameters: map[string]string{
"list-type": "2",
"encoding-type": "url",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5, enableNonStream); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &ListObjectsV2Result{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml, unmarshalEncodeType); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type GetBucketInfoRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type GetBucketInfoResult struct {
// The container that stores the bucket information.
BucketInfo BucketInfo `xml:"Bucket"`
ResultCommon
}
// BucketInfo defines Bucket information
type BucketInfo struct {
// The name of the bucket.
Name *string `xml:"Name"`
// Indicates whether access tracking is enabled for the bucket.
AccessMonitor *string `xml:"AccessMonitor"`
// The region in which the bucket is located.
Location *string `xml:"Location"`
// The time when the bucket is created. The time is in UTC.
CreationDate *time.Time `xml:"CreationDate"`
// The public endpoint that is used to access the bucket over the Internet.
ExtranetEndpoint *string `xml:"ExtranetEndpoint"`
// The internal endpoint that is used to access the bucket from Elastic
IntranetEndpoint *string `xml:"IntranetEndpoint"`
// The container that stores the access control list (ACL) information about the bucket.
ACL *string `xml:"AccessControlList>Grant"`
// The disaster recovery type of the bucket.
DataRedundancyType *string `xml:"DataRedundancyType"`
// The container that stores the information about the bucket owner.
Owner *Owner `xml:"Owner"`
// The storage class of the bucket.
StorageClass *string `xml:"StorageClass"`
// The ID of the resource group to which the bucket belongs.
ResourceGroupId *string `xml:"ResourceGroupId"`
// The container that stores the server-side encryption method.
SseRule SSERule `xml:"ServerSideEncryptionRule"`
// Indicates whether versioning is enabled for the bucket.
Versioning *string `xml:"Versioning"`
// Indicates whether transfer acceleration is enabled for the bucket.
TransferAcceleration *string `xml:"TransferAcceleration"`
// Indicates whether cross-region replication (CRR) is enabled for the bucket.
CrossRegionReplication *string `xml:"CrossRegionReplication"`
// The container that stores the logs.
BucketPolicy BucketPolicy `xml:"BucketPolicy"`
// The description of the bucket.
Comment *string `xml:"Comment"`
// Indicates whether Block Public Access is enabled for the bucket.
// true: Block Public Access is enabled. false: Block Public Access is disabled.
BlockPublicAccess *bool `xml:"BlockPublicAccess"`
}
type SSERule struct {
// The customer master key (CMK) ID in use. A valid value is returned only if you set SSEAlgorithm to KMS
// and specify the CMK ID. In other cases, an empty value is returned.
KMSMasterKeyID *string `xml:"KMSMasterKeyID"`
// The server-side encryption method that is used by default.
SSEAlgorithm *string `xml:"SSEAlgorithm"`
// Object's encryption algorithm. If this element is not included in the response,
// it indicates that the object is using the AES256 encryption algorithm.
// This option is only valid if the SSEAlgorithm value is KMS.
KMSDataEncryption *string `xml:"KMSDataEncryption"`
}
type BucketPolicy struct {
// The name of the bucket that stores the logs.
LogBucket *string `xml:"LogBucket"`
// The directory in which logs are stored.
LogPrefix *string `xml:"LogPrefix"`
}
// GetBucketInfo Queries information about a bucket.
func (c *Client) GetBucketInfo(ctx context.Context, request *GetBucketInfoRequest, optFns ...func(*Options)) (*GetBucketInfoResult, error) {
var err error
if request == nil {
request = &GetBucketInfoRequest{}
}
input := &OperationInput{
OpName: "GetBucketInfo",
Method: "GET",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Parameters: map[string]string{
"bucketInfo": "",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &GetBucketInfoResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml, unmarshalSseRule); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
func unmarshalSseRule(result any, output *OperationOutput) error {
switch r := result.(type) {
case *GetBucketInfoResult:
fields := []*string{r.BucketInfo.SseRule.KMSMasterKeyID, r.BucketInfo.SseRule.SSEAlgorithm, r.BucketInfo.SseRule.KMSDataEncryption}
for _, pp := range fields {
if pp != nil && *pp == "None" {
*pp = ""
}
}
}
return nil
}
type GetBucketLocationRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type GetBucketLocationResult struct {
// The region in which the bucket is located.
LocationConstraint *string `xml:",chardata"`
ResultCommon
}
// GetBucketLocation Queries the region of an Object Storage Service (OSS) bucket.
func (c *Client) GetBucketLocation(ctx context.Context, request *GetBucketLocationRequest, optFns ...func(*Options)) (*GetBucketLocationResult, error) {
var err error
if request == nil {
request = &GetBucketLocationRequest{}
}
input := &OperationInput{
OpName: "GetBucketLocation",
Method: "GET",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Parameters: map[string]string{
"location": "",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &GetBucketLocationResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type GetBucketStatRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type GetBucketStatResult struct {
// The storage capacity of the bucket. Unit: bytes.
Storage int64 `xml:"Storage"`
// The total number of objects that are stored in the bucket.
ObjectCount int64 `xml:"ObjectCount"`
// The number of multipart upload tasks that have been initiated but are not completed or canceled.
MultipartUploadCount int64 `xml:"MultipartUploadCount"`
// The number of LiveChannels in the bucket.
LiveChannelCount int64 `xml:"LiveChannelCount"`
// The time when the obtained information is last modified. The value of this element is a UNIX timestamp. Unit: seconds.
LastModifiedTime int64 `xml:"LastModifiedTime"`
// The storage usage of Standard objects in the bucket. Unit: bytes.
StandardStorage int64 `xml:"StandardStorage"`
// The number of Standard objects in the bucket.
StandardObjectCount int64 `xml:"StandardObjectCount"`
// The billed storage usage of Infrequent Access (IA) objects in the bucket. Unit: bytes.
InfrequentAccessStorage int64 `xml:"InfrequentAccessStorage"`
// The actual storage usage of IA objects in the bucket. Unit: bytes.
InfrequentAccessRealStorage int64 `xml:"InfrequentAccessRealStorage"`
// The number of IA objects in the bucket.
InfrequentAccessObjectCount int64 `xml:"InfrequentAccessObjectCount"`
// The billed storage usage of Archive objects in the bucket. Unit: bytes.
ArchiveStorage int64 `xml:"ArchiveStorage"`
// The actual storage usage of Archive objects in the bucket. Unit: bytes.
ArchiveRealStorage int64 `xml:"ArchiveRealStorage"`
// The number of Archive objects in the bucket.
ArchiveObjectCount int64 `xml:"ArchiveObjectCount"`
// The billed storage usage of Cold Archive objects in the bucket. Unit: bytes.
ColdArchiveStorage int64 `xml:"ColdArchiveStorage"`
// The actual storage usage of Cold Archive objects in the bucket. Unit: bytes.
ColdArchiveRealStorage int64 `xml:"ColdArchiveRealStorage"`
// The number of Cold Archive objects in the bucket.
ColdArchiveObjectCount int64 `xml:"ColdArchiveObjectCount"`
// The number of Deep Cold Archive objects in the bucket.
DeepColdArchiveObjectCount int64 `xml:"DeepColdArchiveObjectCount"`
// The billed storage usage of Deep Cold Archive objects in the bucket. Unit: bytes.
DeepColdArchiveStorage int64 `xml:"DeepColdArchiveStorage"`
// The actual storage usage of Deep Cold Archive objects in the bucket. Unit: bytes.
DeepColdArchiveRealStorage int64 `xml:"DeepColdArchiveRealStorage"`
// The number of multipart parts in the bucket.
MultipartPartCount int64 `xml:"MultipartPartCount"`
// The number of delete marker in the bucket.
DeleteMarkerCount int64 `xml:"DeleteMarkerCount"`
ResultCommon
}
// GetBucketStat Queries the storage capacity of a specified bucket and the number of objects that are stored in the bucket.
func (c *Client) GetBucketStat(ctx context.Context, request *GetBucketStatRequest, optFns ...func(*Options)) (*GetBucketStatResult, error) {
var err error
if request == nil {
request = &GetBucketStatRequest{}
}
input := &OperationInput{
OpName: "GetBucketStat",
Method: "GET",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Parameters: map[string]string{
"stat": "",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &GetBucketStatResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type PutBucketAclRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
// The access control list (ACL) of the object.
Acl BucketACLType `input:"header,x-oss-acl,required"`
RequestCommon
}
type PutBucketAclResult struct {
ResultCommon
}
// PutBucketAcl You can call this operation to configure or modify the ACL of a bucket.
func (c *Client) PutBucketAcl(ctx context.Context, request *PutBucketAclRequest, optFns ...func(*Options)) (*PutBucketAclResult, error) {
var err error
if request == nil {
request = &PutBucketAclRequest{}
}
input := &OperationInput{
OpName: "PutBucketAcl",
Method: "PUT",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Parameters: map[string]string{
"acl": "",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &PutBucketAclResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type GetBucketAclRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type GetBucketAclResult struct {
// The container that stores the access control list (ACL) information about the bucket.
ACL *string `xml:"AccessControlList>Grant"`
// The container that stores information about the bucket owner.
Owner *Owner `xml:"Owner"`
ResultCommon
}
// GetBucketAcl You can call this operation to query the ACL of a bucket.
func (c *Client) GetBucketAcl(ctx context.Context, request *GetBucketAclRequest, optFns ...func(*Options)) (*GetBucketAclResult, error) {
var err error
if request == nil {
request = &GetBucketAclRequest{}
}
input := &OperationInput{
OpName: "GetBucketAcl",
Method: "GET",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Parameters: map[string]string{
"acl": "",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &GetBucketAclResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type PutBucketVersioningRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
VersioningConfiguration *VersioningConfiguration `input:"body,VersioningConfiguration,xml,required"`
RequestCommon
}
type VersioningConfiguration struct {
// The versioning state of the bucket. Valid values: Enabled,Suspended
Status VersioningStatusType `xml:"Status"`
}
type PutBucketVersioningResult struct {
ResultCommon
}
// PutBucketVersioning Configures the versioning state for a bucket.
func (c *Client) PutBucketVersioning(ctx context.Context, request *PutBucketVersioningRequest, optFns ...func(*Options)) (*PutBucketVersioningResult, error) {
var err error
if request == nil {
request = &PutBucketVersioningRequest{}
}
input := &OperationInput{
OpName: "PutBucketVersioning",
Method: "PUT",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeXML,
},
Parameters: map[string]string{
"versioning": "",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &PutBucketVersioningResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type GetBucketVersioningRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type GetBucketVersioningResult struct {
// The versioning state of the bucket. Valid values: Enabled,Suspended
VersionStatus *string `xml:"Status"`
ResultCommon
}
// GetBucketVersioning You can call this operation to query the versioning state of a bucket.
func (c *Client) GetBucketVersioning(ctx context.Context, request *GetBucketVersioningRequest, optFns ...func(*Options)) (*GetBucketVersioningResult, error) {
var err error
if request == nil {
request = &GetBucketVersioningRequest{}
}
input := &OperationInput{
OpName: "GetBucketVersioning",
Method: "GET",
Parameters: map[string]string{
"versioning": "",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &GetBucketVersioningResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type ListObjectVersionsRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
// The character that is used to group objects by name. If you specify the delimiter parameter in the request,
// the response contains the CommonPrefixes parameter. The objects whose names contain the same string from
// the prefix to the next occurrence of the delimiter are grouped as a single result element in CommonPrefixes.
Delimiter *string `input:"query,delimiter"`
// Specifies that objects whose names are alphabetically after the value of the key-marker parameter are returned.
// This parameter can be specified together with version-id-marker.
// By default, this parameter is left empty.
KeyMarker *string `input:"query,key-marker"`
// Specifies that the versions created before the version specified by version-id-marker for the object
// whose name is specified by key-marker are returned by creation time in descending order.
// By default, if this parameter is not specified, the results are returned from the latest
// version of the object whose name is alphabetically after the value of key-marker.
VersionIdMarker *string `input:"query,version-id-marker"`
// The maximum number of objects that you want to return. If the list operation cannot be complete at a time
// because the max-keys parameter is specified, the NextMarker element is included in the response as the marker
// for the next list operation.
MaxKeys int32 `input:"query,max-keys"`
// The prefix that the names of the returned objects must contain.
Prefix *string `input:"query,prefix"`
// The encoding type of the content in the response. Valid value: url
EncodingType *string `input:"query,encoding-type"`
// To indicate that the requester is aware that the request and data download will incur costs
RequestPayer *string `input:"header,x-oss-request-payer"`
// To indicate that whether to stores the versions of objects and delete markers together in one container.
// When false(default), stores the versions of objects into ListObjectVersionsResult.ObjectVersions,
// When false(default), stores the delete markers into ListObjectVersionsResult.ObjectDeleteMarkers,
// When true, stores the versions and delete markers into ListObjectVersionsResult.ObjectVersionsDeleteMarkers,
IsMix bool
RequestCommon
}
type ListObjectVersionsResult struct {
// The name of the bucket.
Name *string `xml:"Name"`
// Indicates the object from which the ListObjectVersions (GetBucketVersions) operation starts.
KeyMarker *string `xml:"KeyMarker"`
// The version from which the ListObjectVersions (GetBucketVersions) operation starts.
// This parameter is used together with KeyMarker.
VersionIdMarker *string `xml:"VersionIdMarker"`
// If not all results are returned for the request, the NextKeyMarker parameter is included
// in the response to indicate the key-marker value of the next ListObjectVersions (GetBucketVersions) request.
NextKeyMarker *string `xml:"NextKeyMarker"`
// If not all results are returned for the request, the NextVersionIdMarker parameter is included in
// the response to indicate the version-id-marker value of the next ListObjectVersions (GetBucketVersions) request.
NextVersionIdMarker *string `xml:"NextVersionIdMarker"`
// The container that stores delete markers.
ObjectDeleteMarkers []ObjectDeleteMarkerProperties `xml:"DeleteMarker"`
// The container that stores the versions of objects, excluding delete markers.
ObjectVersions []ObjectVersionProperties `xml:"Version"`
// The container that stores the versions of objects and delete markers together in the order they are returned.
// Only valid when ListObjectVersionsRequest.IsMix is set to true
ObjectVersionsDeleteMarkers []ObjectMixProperties `xml:"ObjectMix"`
// The prefix contained in the returned object names.
Prefix *string `xml:"Prefix"`
// The maximum number of returned objects in the response.
MaxKeys int32 `xml:"MaxKeys"`
// The character that is used to group objects by name.
Delimiter *string `xml:"Delimiter"`
// Indicates whether the returned results are truncated.
// true indicates that not all results are returned this time.
// false indicates that all results are returned this time.
IsTruncated bool `xml:"IsTruncated"`
// The encoding type of the content in the response.
EncodingType *string `xml:"EncodingType"`
// If the Delimiter parameter is specified in the request, the response contains the CommonPrefixes element.
CommonPrefixes []CommonPrefix `xml:"CommonPrefixes"`
ResultCommon
}
type ObjectMixProperties ObjectVersionProperties
func (m ObjectMixProperties) IsDeleteMarker() bool {
if m.VersionId != nil && m.Type == nil {
return true
}
return false
}
type ObjectDeleteMarkerProperties struct {
// The name of the object.
Key *string `xml:"Key"`
// The version ID of the object.
VersionId *string `xml:"VersionId"`
// Indicates whether the version is the current version.
IsLatest bool `xml:"IsLatest"`
// The time when the returned objects were last modified.
LastModified *time.Time `xml:"LastModified"`
// The container that stores information about the bucket owner.
Owner *Owner `xml:"Owner"`
}
type ObjectVersionProperties struct {
// The name of the object.
Key *string `xml:"Key"`
// The version ID of the object.
VersionId *string `xml:"VersionId"`
// Indicates whether the version is the current version.
IsLatest bool `xml:"IsLatest"`
// The time when the returned objects were last modified.
LastModified *time.Time `xml:"LastModified"`
// The type of the returned object.
Type *string `xml:"Type"`
// The size of the returned object. Unit: bytes.
Size int64 `xml:"Size"`
// The entity tag (ETag) that is generated when an object is created. ETags are used to identify the content of objects.
ETag *string `xml:"ETag"`
// The storage class of the object.
StorageClass *string `xml:"StorageClass"`
// The container that stores information about the bucket owner.
Owner *Owner `xml:"Owner"`
// The restoration status of the object.
RestoreInfo *string `xml:"RestoreInfo"`
// The time when the storage class of the object is converted to Cold Archive or Deep Cold Archive based on lifecycle rules.
TransitionTime *time.Time `xml:"TransitionTime"`
}
// ListObjectVersions Lists the versions of all objects in a bucket, including delete markers.
func (c *Client) ListObjectVersions(ctx context.Context, request *ListObjectVersionsRequest, optFns ...func(*Options)) (*ListObjectVersionsResult, error) {
var err error
if request == nil {
request = &ListObjectVersionsRequest{}
}
input := &OperationInput{
OpName: "ListObjectVersions",
Method: "GET",
Parameters: map[string]string{
"versions": "",
"encoding-type": "url",
},
Bucket: request.Bucket,
}
if err = c.marshalInput(request, input, updateContentMd5, enableNonStream); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &ListObjectVersionsResult{}
var unmarshalFns []func(result any, output *OperationOutput) error
if request.IsMix {
unmarshalFns = append(unmarshalFns, unmarshalBodyXmlVersions)
} else {
unmarshalFns = append(unmarshalFns, unmarshalBodyXml)
}
unmarshalFns = append(unmarshalFns, unmarshalEncodeType)
if err = c.unmarshalOutput(result, output, unmarshalFns...); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type PutBucketRequestPaymentRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
// The request payment configuration information for the bucket.
PaymentConfiguration *RequestPaymentConfiguration `input:"body,RequestPaymentConfiguration,xml,required"`
RequestCommon
}
type RequestPaymentConfiguration struct {
XMLName xml.Name `xml:"RequestPaymentConfiguration"`
// The payer of the request and traffic fees.
Payer PayerType `xml:"Payer"`
}
type PutBucketRequestPaymentResult struct {
ResultCommon
}
// PutBucketRequestPayment You can call this operation to enable pay-by-requester for a bucket.
func (c *Client) PutBucketRequestPayment(ctx context.Context, request *PutBucketRequestPaymentRequest, optFns ...func(*Options)) (*PutBucketRequestPaymentResult, error) {
var err error
if request == nil {
request = &PutBucketRequestPaymentRequest{}
}
input := &OperationInput{
OpName: "PutBucketRequestPayment",
Method: "PUT",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Parameters: map[string]string{
"requestPayment": "",
},
Bucket: request.Bucket,
}
input.OpMetadata.Set(signer.SubResource, []string{"requestPayment"})
if err = c.marshalInput(request, input, updateContentMd5); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &PutBucketRequestPaymentResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type GetBucketRequestPaymentRequest struct {
// The name of the bucket containing the objects
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type GetBucketRequestPaymentResult struct {
// Indicates who pays the download and request fees.
Payer *string `xml:"Payer"`
ResultCommon
}
// GetBucketRequestPayment You can call this operation to obtain pay-by-requester configurations for a bucket.
func (c *Client) GetBucketRequestPayment(ctx context.Context, request *GetBucketRequestPaymentRequest, optFns ...func(*Options)) (*GetBucketRequestPaymentResult, error) {
var err error
if request == nil {
request = &GetBucketRequestPaymentRequest{}
}
input := &OperationInput{
OpName: "GetBucketRequestPayment",
Method: "GET",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeDefault,
},
Parameters: map[string]string{
"requestPayment": "",
},
Bucket: request.Bucket,
}
input.OpMetadata.Set(signer.SubResource, []string{"requestPayment"})
if err = c.marshalInput(request, input); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &GetBucketRequestPaymentResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXml); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}