func (s *Bucket) DeleteObjectRequest(objectKey string) (*request.Request, *DeleteObjectOutput, error) {
	properties := *s.Properties
	properties.ObjectKey = &objectKey
	o := &data.Operation{
		Config:        s.Config,
		Properties:    &properties,
		APIName:       "DELETE Object",
		RequestMethod: "DELETE",
		RequestURI:    "/<bucket-name>/<object-key>",
		StatusCodes: []int{
			204,  
		},
	}
	x := &DeleteObjectOutput{}
	r, err := request.New(o, nil, x)
	if err != nil {
		return nil, nil, err
	}
	return r, x, nil
}
DeleteObjectRequest creates request and output object of DeleteObject.
package service
import (
	"context"
	"fmt"
	"io"
	"net/http"
	"strings"
	"time"
	"github.com/qingstor/qingstor-sdk-go/v4/config"
	"github.com/qingstor/qingstor-sdk-go/v4/request"
	"github.com/qingstor/qingstor-sdk-go/v4/request/data"
	"github.com/qingstor/qingstor-sdk-go/v4/request/errors"
	"github.com/qingstor/qingstor-sdk-go/v4/utils"
)
var _ fmt.State
var _ io.Reader
var _ http.Header
var _ strings.Reader
var _ time.Time
var _ config.Config
var _ utils.Conn
func (s *Bucket) AbortMultipartUpload(objectKey string, input *AbortMultipartUploadInput) (*AbortMultipartUploadOutput, error) {
	return s.AbortMultipartUploadWithContext(context.Background(), objectKey, input)
}
func (s *Bucket) AbortMultipartUploadWithContext(ctx context.Context, objectKey string, input *AbortMultipartUploadInput) (*AbortMultipartUploadOutput, error) {
	if ctx == nil {
		ctx = context.Background()
	}
	r, x, err := s.AbortMultipartUploadRequest(objectKey, input)
	if err != nil {
		return x, err
	}
	err = r.SendWithContext(ctx)
	if err != nil {
		return nil, err
	}
	requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID"))
	x.RequestID = &requestID
	return x, err
}
func (s *Bucket) AbortMultipartUploadRequest(objectKey string, input *AbortMultipartUploadInput) (*request.Request, *AbortMultipartUploadOutput, error) {
	if input == nil {
		input = &AbortMultipartUploadInput{}
	}
	properties := *s.Properties
	properties.ObjectKey = &objectKey
	o := &data.Operation{
		Config:        s.Config,
		Properties:    &properties,
		APIName:       "Abort Multipart Upload",
		RequestMethod: "DELETE",
		RequestURI:    "/<bucket-name>/<object-key>",
		StatusCodes: []int{
			204,  
		},
	}
	x := &AbortMultipartUploadOutput{}
	r, err := request.New(o, input, x)
	if err != nil {
		return nil, nil, err
	}
	return r, x, nil
}
type AbortMultipartUploadInput struct {
	UploadID *string `json:"upload_id" name:"upload_id" location:"query"`  
}
func (v *AbortMultipartUploadInput) Validate() error {
	if v.UploadID == nil {
		return errors.ParameterRequiredError{
			ParameterName: "UploadID",
			ParentName:    "AbortMultipartUploadInput",
		}
	}
	return nil
}
type AbortMultipartUploadOutput struct {
	StatusCode *int `location:"statusCode"`
	RequestID *string `location:"requestID"`
}
func (s *Bucket) AppendObject(objectKey string, input *AppendObjectInput) (*AppendObjectOutput, error) {
	return s.AppendObjectWithContext(context.Background(), objectKey, input)
}
func (s *Bucket) AppendObjectWithContext(ctx context.Context, objectKey string, input *AppendObjectInput) (*AppendObjectOutput, error) {
	if ctx == nil {
		ctx = context.Background()
	}
	r, x, err := s.AppendObjectRequest(objectKey, input)
	if err != nil {
		return x, err
	}
	err = r.SendWithContext(ctx)
	if err != nil {
		return nil, err
	}
	requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID"))
	x.RequestID = &requestID
	return x, err
}
func (s *Bucket) AppendObjectRequest(objectKey string, input *AppendObjectInput) (*request.Request, *AppendObjectOutput, error) {
	if input == nil {
		input = &AppendObjectInput{}
	}
	properties := *s.Properties
	properties.ObjectKey = &objectKey
	o := &data.Operation{
		Config:        s.Config,
		Properties:    &properties,
		APIName:       "Append Object",
		RequestMethod: "POST",
		RequestURI:    "/<bucket-name>/<object-key>?append",
		StatusCodes: []int{
			200,  
		},
	}
	x := &AppendObjectOutput{}
	r, err := request.New(o, input, x)
	if err != nil {
		return nil, nil, err
	}
	return r, x, nil
}
type AppendObjectInput struct {
	Position *int64 `json:"position" name:"position" location:"query"`  
	ContentLength *int64 `json:"Content-Length" name:"Content-Length" location:"headers"`  
	ContentMD5 *string `json:"Content-MD5,omitempty" name:"Content-MD5" location:"headers"`
	ContentType *string `json:"Content-Type,omitempty" name:"Content-Type" location:"headers"`
	XQSStorageClass *string `json:"X-QS-Storage-Class,omitempty" name:"X-QS-Storage-Class" location:"headers"`
	Body io.Reader `location:"body"`
}
func (v *AppendObjectInput) Validate() error {
	if v.XQSStorageClass != nil {
		xQSStorageClassValidValues := []string{"STANDARD", "STANDARD_IA"}
		xQSStorageClassParameterValue := fmt.Sprint(*v.XQSStorageClass)
		xQSStorageClassIsValid := false
		for _, value := range xQSStorageClassValidValues {
			if value == xQSStorageClassParameterValue {
				xQSStorageClassIsValid = true
			}
		}
		if !xQSStorageClassIsValid {
			return errors.ParameterValueNotAllowedError{
				ParameterName:  "XQSStorageClass",
				ParameterValue: xQSStorageClassParameterValue,
				AllowedValues:  xQSStorageClassValidValues,
			}
		}
	}
	return nil
}
type AppendObjectOutput struct {
	StatusCode *int `location:"statusCode"`
	RequestID *string `location:"requestID"`
	XQSNextAppendPosition *int64 `json:"X-QS-Next-Append-Position,omitempty" name:"X-QS-Next-Append-Position" location:"headers"`
}
func (s *Bucket) CompleteMultipartUpload(objectKey string, input *CompleteMultipartUploadInput) (*CompleteMultipartUploadOutput, error) {
	return s.CompleteMultipartUploadWithContext(context.Background(), objectKey, input)
}
func (s *Bucket) CompleteMultipartUploadWithContext(ctx context.Context, objectKey string, input *CompleteMultipartUploadInput) (*CompleteMultipartUploadOutput, error) {
	if ctx == nil {
		ctx = context.Background()
	}
	r, x, err := s.CompleteMultipartUploadRequest(objectKey, input)
	if err != nil {
		return x, err
	}
	err = r.SendWithContext(ctx)
	if err != nil {
		return nil, err
	}
	requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID"))
	x.RequestID = &requestID
	return x, err
}
func (s *Bucket) CompleteMultipartUploadRequest(objectKey string, input *CompleteMultipartUploadInput) (*request.Request, *CompleteMultipartUploadOutput, error) {
	if input == nil {
		input = &CompleteMultipartUploadInput{}
	}
	properties := *s.Properties
	properties.ObjectKey = &objectKey
	o := &data.Operation{
		Config:        s.Config,
		Properties:    &properties,
		APIName:       "Complete multipart upload",
		RequestMethod: "POST",
		RequestURI:    "/<bucket-name>/<object-key>",
		StatusCodes: []int{
			201,  
		},
	}
	x := &CompleteMultipartUploadOutput{}
	r, err := request.New(o, input, x)
	if err != nil {
		return nil, nil, err
	}
	return r, x, nil
}
type CompleteMultipartUploadInput struct {
	UploadID *string `json:"upload_id" name:"upload_id" location:"query"`  
	ETag *string `json:"ETag,omitempty" name:"ETag" location:"headers"`
	XQSEncryptionCustomerAlgorithm *string `json:"X-QS-Encryption-Customer-Algorithm,omitempty" name:"X-QS-Encryption-Customer-Algorithm" location:"headers"`
	XQSEncryptionCustomerKey *string `json:"X-QS-Encryption-Customer-Key,omitempty" name:"X-QS-Encryption-Customer-Key" location:"headers"`
	XQSEncryptionCustomerKeyMD5 *string `json:"X-QS-Encryption-Customer-Key-MD5,omitempty" name:"X-QS-Encryption-Customer-Key-MD5" location:"headers"`
	ObjectParts []*ObjectPartType `json:"object_parts" name:"object_parts" location:"elements"`  
}
func (v *CompleteMultipartUploadInput) Validate() error {
	if v.UploadID == nil {
		return errors.ParameterRequiredError{
			ParameterName: "UploadID",
			ParentName:    "CompleteMultipartUploadInput",
		}
	}
	if len(v.ObjectParts) == 0 {
		return errors.ParameterRequiredError{
			ParameterName: "ObjectParts",
			ParentName:    "CompleteMultipartUploadInput",
		}
	}
	if len(v.ObjectParts) > 0 {
		for _, property := range v.ObjectParts {
			if err := property.Validate(); err != nil {
				return err
			}
		}
	}
	return nil
}
type CompleteMultipartUploadOutput struct {
	StatusCode *int `location:"statusCode"`
	RequestID *string `location:"requestID"`
	XQSEncryptionCustomerAlgorithm *string `json:"X-QS-Encryption-Customer-Algorithm,omitempty" name:"X-QS-Encryption-Customer-Algorithm" location:"headers"`
}
func (s *Bucket) DeleteObject(objectKey string) (*DeleteObjectOutput, error) {
	return s.DeleteObjectWithContext(context.Background(), objectKey)
}
func (s *Bucket) DeleteObjectWithContext(ctx context.Context, objectKey string) (*DeleteObjectOutput, error) {
	if ctx == nil {
		ctx = context.Background()
	}
	r, x, err := s.DeleteObjectRequest(objectKey)
	if err != nil {
		return x, err
	}
	err = r.SendWithContext(ctx)
	if err != nil {
		return nil, err
	}
	requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID"))
	x.RequestID = &requestID
	return x, err
}