1// Code generated by smithy-go-codegen DO NOT EDIT.
2
3package s3
4
5import (
6	"context"
7	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
8	"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
9	s3cust "github.com/aws/aws-sdk-go-v2/service/s3/internal/customizations"
10	"github.com/aws/aws-sdk-go-v2/service/s3/types"
11	"github.com/aws/smithy-go/middleware"
12	smithyhttp "github.com/aws/smithy-go/transport/http"
13)
14
15// This operation aborts a multipart upload. After a multipart upload is aborted,
16// no additional parts can be uploaded using that upload ID. The storage consumed
17// by any previously uploaded parts will be freed. However, if any part uploads are
18// currently in progress, those part uploads might or might not succeed. As a
19// result, it might be necessary to abort a given multipart upload multiple times
20// in order to completely free all storage consumed by all parts. To verify that
21// all parts have been removed, so you don't get charged for the part storage, you
22// should call the ListParts
23// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html) operation
24// and ensure that the parts list is empty. For information about permissions
25// required to use the multipart upload API, see Multipart Upload API and
26// Permissions
27// (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html). The
28// following operations are related to AbortMultipartUpload:
29//
30// *
31// CreateMultipartUpload
32// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
33//
34// *
35// UploadPart
36// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
37//
38// *
39// CompleteMultipartUpload
40// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
41//
42// *
43// ListParts
44// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)
45//
46// *
47// ListMultipartUploads
48// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html)
49func (c *Client) AbortMultipartUpload(ctx context.Context, params *AbortMultipartUploadInput, optFns ...func(*Options)) (*AbortMultipartUploadOutput, error) {
50	if params == nil {
51		params = &AbortMultipartUploadInput{}
52	}
53
54	result, metadata, err := c.invokeOperation(ctx, "AbortMultipartUpload", params, optFns, addOperationAbortMultipartUploadMiddlewares)
55	if err != nil {
56		return nil, err
57	}
58
59	out := result.(*AbortMultipartUploadOutput)
60	out.ResultMetadata = metadata
61	return out, nil
62}
63
64type AbortMultipartUploadInput struct {
65
66	// The bucket name to which the upload was taking place. When using this API with
67	// an access point, you must direct requests to the access point hostname. The
68	// access point hostname takes the form
69	// AccessPointName-AccountId.s3-accesspoint.Region.amazonaws.com. When using this
70	// operation with an access point through the AWS SDKs, you provide the access
71	// point ARN in place of the bucket name. For more information about access point
72	// ARNs, see Using Access Points
73	// (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html) in
74	// the Amazon Simple Storage Service Developer Guide. When using this API with
75	// Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname.
76	// The S3 on Outposts hostname takes the form
77	// AccessPointName-AccountId.outpostID.s3-outposts.Region.amazonaws.com. When using
78	// this operation using S3 on Outposts through the AWS SDKs, you provide the
79	// Outposts bucket ARN in place of the bucket name. For more information about S3
80	// on Outposts ARNs, see Using S3 on Outposts
81	// (https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html) in the
82	// Amazon Simple Storage Service Developer Guide.
83	//
84	// This member is required.
85	Bucket *string
86
87	// Key of the object for which the multipart upload was initiated.
88	//
89	// This member is required.
90	Key *string
91
92	// Upload ID that identifies the multipart upload.
93	//
94	// This member is required.
95	UploadId *string
96
97	// The account id of the expected bucket owner. If the bucket is owned by a
98	// different account, the request will fail with an HTTP 403 (Access Denied) error.
99	ExpectedBucketOwner *string
100
101	// Confirms that the requester knows that they will be charged for the request.
102	// Bucket owners need not specify this parameter in their requests. For information
103	// about downloading objects from requester pays buckets, see Downloading Objects
104	// in Requestor Pays Buckets
105	// (https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html)
106	// in the Amazon S3 Developer Guide.
107	RequestPayer types.RequestPayer
108}
109
110type AbortMultipartUploadOutput struct {
111
112	// If present, indicates that the requester was successfully charged for the
113	// request.
114	RequestCharged types.RequestCharged
115
116	// Metadata pertaining to the operation's result.
117	ResultMetadata middleware.Metadata
118}
119
120func addOperationAbortMultipartUploadMiddlewares(stack *middleware.Stack, options Options) (err error) {
121	err = stack.Serialize.Add(&awsRestxml_serializeOpAbortMultipartUpload{}, middleware.After)
122	if err != nil {
123		return err
124	}
125	err = stack.Deserialize.Add(&awsRestxml_deserializeOpAbortMultipartUpload{}, middleware.After)
126	if err != nil {
127		return err
128	}
129	if err = addSetLoggerMiddleware(stack, options); err != nil {
130		return err
131	}
132	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
133		return err
134	}
135	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
136		return err
137	}
138	if err = addResolveEndpointMiddleware(stack, options); err != nil {
139		return err
140	}
141	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
142		return err
143	}
144	if err = addRetryMiddlewares(stack, options); err != nil {
145		return err
146	}
147	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
148		return err
149	}
150	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
151		return err
152	}
153	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
154		return err
155	}
156	if err = addClientUserAgent(stack); err != nil {
157		return err
158	}
159	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
160		return err
161	}
162	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
163		return err
164	}
165	if err = addOpAbortMultipartUploadValidationMiddleware(stack); err != nil {
166		return err
167	}
168	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opAbortMultipartUpload(options.Region), middleware.Before); err != nil {
169		return err
170	}
171	if err = addMetadataRetrieverMiddleware(stack); err != nil {
172		return err
173	}
174	if err = addAbortMultipartUploadUpdateEndpoint(stack, options); err != nil {
175		return err
176	}
177	if err = addResponseErrorMiddleware(stack); err != nil {
178		return err
179	}
180	if err = v4.AddContentSHA256HeaderMiddleware(stack); err != nil {
181		return err
182	}
183	if err = disableAcceptEncodingGzip(stack); err != nil {
184		return err
185	}
186	if err = addRequestResponseLogging(stack, options); err != nil {
187		return err
188	}
189	return nil
190}
191
192func newServiceMetadataMiddleware_opAbortMultipartUpload(region string) *awsmiddleware.RegisterServiceMetadata {
193	return &awsmiddleware.RegisterServiceMetadata{
194		Region:        region,
195		ServiceID:     ServiceID,
196		SigningName:   "s3",
197		OperationName: "AbortMultipartUpload",
198	}
199}
200
201// getAbortMultipartUploadBucketMember returns a pointer to string denoting a
202// provided bucket member valueand a boolean indicating if the input has a modeled
203// bucket name,
204func getAbortMultipartUploadBucketMember(input interface{}) (*string, bool) {
205	in := input.(*AbortMultipartUploadInput)
206	if in.Bucket == nil {
207		return nil, false
208	}
209	return in.Bucket, true
210}
211func addAbortMultipartUploadUpdateEndpoint(stack *middleware.Stack, options Options) error {
212	return s3cust.UpdateEndpoint(stack, s3cust.UpdateEndpointOptions{
213		Accessor: s3cust.UpdateEndpointParameterAccessor{
214			GetBucketFromInput: getAbortMultipartUploadBucketMember,
215		},
216		UsePathStyle:            options.UsePathStyle,
217		UseAccelerate:           options.UseAccelerate,
218		SupportsAccelerate:      true,
219		EndpointResolver:        options.EndpointResolver,
220		EndpointResolverOptions: options.EndpointOptions,
221		UseDualstack:            options.UseDualstack,
222		UseARNRegion:            options.UseARNRegion,
223	})
224}
225