-
Notifications
You must be signed in to change notification settings - Fork 612
/
Copy pathCompleteMultipartUploadCommand.ts
284 lines (281 loc) · 14.6 KB
/
CompleteMultipartUploadCommand.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
// smithy-typescript generated code
import { getThrow200ExceptionsPlugin } from "@aws-sdk/middleware-sdk-s3";
import { getSsecPlugin } from "@aws-sdk/middleware-ssec";
import { getEndpointPlugin } from "@smithy/middleware-endpoint";
import { getSerdePlugin } from "@smithy/middleware-serde";
import { Command as $Command } from "@smithy/smithy-client";
import { MetadataBearer as __MetadataBearer } from "@smithy/types";
import { commonParams } from "../endpoint/EndpointParameters";
import {
CompleteMultipartUploadOutput,
CompleteMultipartUploadOutputFilterSensitiveLog,
CompleteMultipartUploadRequest,
CompleteMultipartUploadRequestFilterSensitiveLog,
} from "../models/models_0";
import { de_CompleteMultipartUploadCommand, se_CompleteMultipartUploadCommand } from "../protocols/Aws_restXml";
import { S3ClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../S3Client";
/**
* @public
*/
export type { __MetadataBearer };
export { $Command };
/**
* @public
*
* The input for {@link CompleteMultipartUploadCommand}.
*/
export interface CompleteMultipartUploadCommandInput extends CompleteMultipartUploadRequest {}
/**
* @public
*
* The output of {@link CompleteMultipartUploadCommand}.
*/
export interface CompleteMultipartUploadCommandOutput extends CompleteMultipartUploadOutput, __MetadataBearer {}
/**
* <p>Completes a multipart upload by assembling previously uploaded parts.</p>
* <p>You first initiate the multipart upload and then upload all parts using the <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
* operation or the <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>
* operation. After successfully uploading all relevant parts of an upload, you call this
* <code>CompleteMultipartUpload</code> operation to complete the upload. Upon receiving this request, Amazon S3 concatenates all the parts
* in ascending order by part number to create a new object. In the CompleteMultipartUpload
* request, you must provide the parts list and ensure that the parts list is complete.
* The CompleteMultipartUpload API operation concatenates the parts that you provide in the list. For each part in the list,
* you must provide the <code>PartNumber</code> value and the <code>ETag</code> value that are returned after that part
* was uploaded.</p>
* <p>The processing of a CompleteMultipartUpload request could take several minutes to
* finalize. After Amazon S3 begins processing the request, it sends an HTTP response header that
* specifies a <code>200 OK</code> response. While processing is in progress, Amazon S3 periodically sends white
* space characters to keep the connection from timing out. A request could fail after the
* initial <code>200 OK</code> response has been sent. This means that a <code>200 OK</code> response can
* contain either a success or an error. The error response might be embedded in the <code>200 OK</code> response.
* If you call this API operation directly, make sure to design
* your application to parse the contents of the response and handle it appropriately. If you
* use Amazon Web Services SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply
* error handling per your configuration settings (including automatically retrying the
* request as appropriate). If the condition persists, the SDKs throw an exception (or, for
* the SDKs that don't use exceptions, they return an error). </p>
* <p>Note that if <code>CompleteMultipartUpload</code> fails, applications should be prepared
* to retry any failed requests (including 500 error responses). For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html">Amazon S3 Error Best
* Practices</a>.</p>
* <important>
* <p>You can't use <code>Content-Type: application/x-www-form-urlencoded</code> for the
* CompleteMultipartUpload requests. Also, if you don't provide a
* <code>Content-Type</code> header, <code>CompleteMultipartUpload</code> can still return a <code>200
* OK</code> response.</p>
* </important>
* <p>For more information about multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading Objects Using Multipart
* Upload</a> in the <i>Amazon S3
* User Guide</i>.</p>
* <note>
* <p>
* <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket_name</i>.s3express-<i>az_id</i>.<i>region</i>.amazonaws.com/<i>key-name</i>
* </code>. Path-style requests are not supported. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html">Regional and Zonal endpoints</a> in the
* <i>Amazon S3 User Guide</i>.</p>
* </note>
* <dl>
* <dt>Permissions</dt>
* <dd>
* <ul>
* <li>
* <p>
* <b>General purpose bucket permissions</b> - For information about permissions required to use the multipart upload API, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart Upload
* and Permissions</a> in the <i>Amazon S3
* User Guide</i>.</p>
* </li>
* <li>
* <p>
* <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html">
* <code>CreateSession</code>
* </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use.
* Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html">
* <code>CreateSession</code>
* </a>.</p>
* </li>
* </ul>
* </dd>
* <dt>Special errors</dt>
* <dd>
* <ul>
* <li>
* <p>Error Code: <code>EntityTooSmall</code>
* </p>
* <ul>
* <li>
* <p>Description: Your proposed upload is smaller than the minimum allowed object
* size. Each part must be at least 5 MB in size, except the last part.</p>
* </li>
* <li>
* <p>HTTP Status Code: 400 Bad Request</p>
* </li>
* </ul>
* </li>
* <li>
* <p>Error Code: <code>InvalidPart</code>
* </p>
* <ul>
* <li>
* <p>Description: One or more of the specified parts could not be found. The part
* might not have been uploaded, or the specified ETag might not have
* matched the uploaded part's ETag.</p>
* </li>
* <li>
* <p>HTTP Status Code: 400 Bad Request</p>
* </li>
* </ul>
* </li>
* <li>
* <p>Error Code: <code>InvalidPartOrder</code>
* </p>
* <ul>
* <li>
* <p>Description: The list of parts was not in ascending order. The parts list
* must be specified in order by part number.</p>
* </li>
* <li>
* <p>HTTP Status Code: 400 Bad Request</p>
* </li>
* </ul>
* </li>
* <li>
* <p>Error Code: <code>NoSuchUpload</code>
* </p>
* <ul>
* <li>
* <p>Description: The specified multipart upload does not exist. The upload ID
* might be invalid, or the multipart upload might have been aborted or
* completed.</p>
* </li>
* <li>
* <p>HTTP Status Code: 404 Not Found</p>
* </li>
* </ul>
* </li>
* </ul>
* </dd>
* <dt>HTTP Host header syntax</dt>
* <dd>
* <p>
* <b>Directory buckets </b> - The HTTP Host header syntax is <code>
* <i>Bucket_name</i>.s3express-<i>az_id</i>.<i>region</i>.amazonaws.com</code>.</p>
* </dd>
* </dl>
* <p>The following operations are related to <code>CompleteMultipartUpload</code>:</p>
* <ul>
* <li>
* <p>
* <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
* </p>
* </li>
* <li>
* <p>
* <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
* </p>
* </li>
* <li>
* <p>
* <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
* </p>
* </li>
* <li>
* <p>
* <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
* </p>
* </li>
* <li>
* <p>
* <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
* </p>
* </li>
* </ul>
* @example
* Use a bare-bones client and the command you need to make an API call.
* ```javascript
* import { S3Client, CompleteMultipartUploadCommand } from "@aws-sdk/client-s3"; // ES Modules import
* // const { S3Client, CompleteMultipartUploadCommand } = require("@aws-sdk/client-s3"); // CommonJS import
* const client = new S3Client(config);
* const input = { // CompleteMultipartUploadRequest
* Bucket: "STRING_VALUE", // required
* Key: "STRING_VALUE", // required
* MultipartUpload: { // CompletedMultipartUpload
* Parts: [ // CompletedPartList
* { // CompletedPart
* ETag: "STRING_VALUE",
* ChecksumCRC32: "STRING_VALUE",
* ChecksumCRC32C: "STRING_VALUE",
* ChecksumSHA1: "STRING_VALUE",
* ChecksumSHA256: "STRING_VALUE",
* PartNumber: Number("int"),
* },
* ],
* },
* UploadId: "STRING_VALUE", // required
* ChecksumCRC32: "STRING_VALUE",
* ChecksumCRC32C: "STRING_VALUE",
* ChecksumSHA1: "STRING_VALUE",
* ChecksumSHA256: "STRING_VALUE",
* RequestPayer: "requester",
* ExpectedBucketOwner: "STRING_VALUE",
* SSECustomerAlgorithm: "STRING_VALUE",
* SSECustomerKey: "STRING_VALUE",
* SSECustomerKeyMD5: "STRING_VALUE",
* };
* const command = new CompleteMultipartUploadCommand(input);
* const response = await client.send(command);
* // { // CompleteMultipartUploadOutput
* // Location: "STRING_VALUE",
* // Bucket: "STRING_VALUE",
* // Key: "STRING_VALUE",
* // Expiration: "STRING_VALUE",
* // ETag: "STRING_VALUE",
* // ChecksumCRC32: "STRING_VALUE",
* // ChecksumCRC32C: "STRING_VALUE",
* // ChecksumSHA1: "STRING_VALUE",
* // ChecksumSHA256: "STRING_VALUE",
* // ServerSideEncryption: "AES256" || "aws:kms" || "aws:kms:dsse",
* // VersionId: "STRING_VALUE",
* // SSEKMSKeyId: "STRING_VALUE",
* // BucketKeyEnabled: true || false,
* // RequestCharged: "requester",
* // };
*
* ```
*
* @param CompleteMultipartUploadCommandInput - {@link CompleteMultipartUploadCommandInput}
* @returns {@link CompleteMultipartUploadCommandOutput}
* @see {@link CompleteMultipartUploadCommandInput} for command's `input` shape.
* @see {@link CompleteMultipartUploadCommandOutput} for command's `response` shape.
* @see {@link S3ClientResolvedConfig | config} for S3Client's `config` shape.
*
* @throws {@link S3ServiceException}
* <p>Base exception class for all service exceptions from S3 service.</p>
*
*
* @public
*/
export class CompleteMultipartUploadCommand extends $Command
.classBuilder<
CompleteMultipartUploadCommandInput,
CompleteMultipartUploadCommandOutput,
S3ClientResolvedConfig,
ServiceInputTypes,
ServiceOutputTypes
>()
.ep({
...commonParams,
Bucket: { type: "contextParams", name: "Bucket" },
Key: { type: "contextParams", name: "Key" },
})
.m(function (this: any, Command: any, cs: any, config: S3ClientResolvedConfig, o: any) {
return [
getSerdePlugin(config, this.serialize, this.deserialize),
getEndpointPlugin(config, Command.getEndpointParameterInstructions()),
getThrow200ExceptionsPlugin(config),
getSsecPlugin(config),
];
})
.s("AmazonS3", "CompleteMultipartUpload", {})
.n("S3Client", "CompleteMultipartUploadCommand")
.f(CompleteMultipartUploadRequestFilterSensitiveLog, CompleteMultipartUploadOutputFilterSensitiveLog)
.ser(se_CompleteMultipartUploadCommand)
.de(de_CompleteMultipartUploadCommand)
.build() {}