-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathListMultipartUploadsRequest.php
More file actions
363 lines (318 loc) · 12.5 KB
/
Copy pathListMultipartUploadsRequest.php
File metadata and controls
363 lines (318 loc) · 12.5 KB
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
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
<?php
namespace AsyncAws\S3\Input;
use AsyncAws\Core\Exception\InvalidArgument;
use AsyncAws\Core\Input;
use AsyncAws\Core\Request;
use AsyncAws\Core\Stream\StreamFactory;
use AsyncAws\S3\Enum\EncodingType;
use AsyncAws\S3\Enum\RequestPayer;
final class ListMultipartUploadsRequest extends Input
{
/**
* The name of the bucket to which the multipart upload was initiated.
*
* **Directory buckets** - When you use this operation with a directory bucket, you must use virtual-hosted-style
* requests in the format `*Bucket-name*.s3express-*zone-id*.*region-code*.amazonaws.com`. Path-style requests are not
* supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names
* must follow the format `*bucket-base-name*--*zone-id*--x-s3` (for example,
* `*amzn-s3-demo-bucket*--*usw2-az1*--x-s3`). For information about bucket naming restrictions, see Directory bucket
* naming rules [^1] in the *Amazon S3 User Guide*.
*
* **Access points** - When you use this action with an access point for general purpose buckets, you must provide the
* alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with
* an access point for directory buckets, you must provide the access point name in place of the bucket name. When using
* the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form
* *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com. When using this action with an access point
* through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more
* information about access point ARNs, see Using access points [^2] in the *Amazon S3 User Guide*.
*
* > Object Lambda access points are not supported by directory buckets.
*
* **S3 on Outposts** - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts
* hostname. The S3 on Outposts hostname takes the form
* `*AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com`. When you use this action with S3 on
* Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more
* information about S3 on Outposts, see What is S3 on Outposts? [^3] in the *Amazon S3 User Guide*.
*
* [^1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html
* [^2]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html
* [^3]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html
*
* @required
*
* @var string|null
*/
private $bucket;
/**
* Character you use to group keys.
*
* All keys that contain the same string between the prefix, if specified, and the first occurrence of the delimiter
* after the prefix are grouped under a single result element, `CommonPrefixes`. If you don't specify the prefix
* parameter, then the substring starts at the beginning of the key. The keys that are grouped under `CommonPrefixes`
* result element are not returned elsewhere in the response.
*
* `CommonPrefixes` is filtered out from results if it is not lexicographically greater than the key-marker.
*
* > **Directory buckets** - For directory buckets, `/` is the only supported delimiter.
*
* @var string|null
*/
private $delimiter;
/**
* @var EncodingType::*|null
*/
private $encodingType;
/**
* Specifies the multipart upload after which listing should begin.
*
* > - **General purpose buckets** - For general purpose buckets, `key-marker` is an object key. Together with
* > `upload-id-marker`, this parameter specifies the multipart upload after which listing should begin.
* >
* > If `upload-id-marker` is not specified, only the keys lexicographically greater than the specified `key-marker`
* > will be included in the list.
* >
* > If `upload-id-marker` is specified, any multipart uploads for a key equal to the `key-marker` might also be
* > included, provided those multipart uploads have upload IDs lexicographically greater than the specified
* > `upload-id-marker`.
* > - **Directory buckets** - For directory buckets, `key-marker` is obfuscated and isn't a real object key. The
* > `upload-id-marker` parameter isn't supported by directory buckets. To list the additional multipart uploads, you
* > only need to set the value of `key-marker` to the `NextKeyMarker` value from the previous response.
* >
* > In the `ListMultipartUploads` response, the multipart uploads aren't sorted lexicographically based on the object
* > keys.
* >
*
* @var string|null
*/
private $keyMarker;
/**
* Sets the maximum number of multipart uploads, from 1 to 1,000, to return in the response body. 1,000 is the maximum
* number of uploads that can be returned in a response.
*
* @var int|null
*/
private $maxUploads;
/**
* Lists in-progress uploads only for those keys that begin with the specified prefix. You can use prefixes to separate
* a bucket into different grouping of keys. (You can think of using `prefix` to make groups in the same way that you'd
* use a folder in a file system.).
*
* > **Directory buckets** - For directory buckets, only prefixes that end in a delimiter (`/`) are supported.
*
* @var string|null
*/
private $prefix;
/**
* Together with key-marker, specifies the multipart upload after which listing should begin. If key-marker is not
* specified, the upload-id-marker parameter is ignored. Otherwise, any multipart uploads for a key equal to the
* key-marker might be included in the list only if they have an upload ID lexicographically greater than the specified
* `upload-id-marker`.
*
* > This functionality is not supported for directory buckets.
*
* @var string|null
*/
private $uploadIdMarker;
/**
* The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of
* the bucket, the request fails with the HTTP status code `403 Forbidden` (access denied).
*
* @var string|null
*/
private $expectedBucketOwner;
/**
* @var RequestPayer::*|null
*/
private $requestPayer;
/**
* @param array{
* Bucket?: string,
* Delimiter?: string|null,
* EncodingType?: EncodingType::*|null,
* KeyMarker?: string|null,
* MaxUploads?: int|null,
* Prefix?: string|null,
* UploadIdMarker?: string|null,
* ExpectedBucketOwner?: string|null,
* RequestPayer?: RequestPayer::*|null,
* '@region'?: string|null,
* } $input
*/
public function __construct(array $input = [])
{
$this->bucket = $input['Bucket'] ?? null;
$this->delimiter = $input['Delimiter'] ?? null;
$this->encodingType = $input['EncodingType'] ?? null;
$this->keyMarker = $input['KeyMarker'] ?? null;
$this->maxUploads = $input['MaxUploads'] ?? null;
$this->prefix = $input['Prefix'] ?? null;
$this->uploadIdMarker = $input['UploadIdMarker'] ?? null;
$this->expectedBucketOwner = $input['ExpectedBucketOwner'] ?? null;
$this->requestPayer = $input['RequestPayer'] ?? null;
parent::__construct($input);
}
/**
* @param array{
* Bucket?: string,
* Delimiter?: string|null,
* EncodingType?: EncodingType::*|null,
* KeyMarker?: string|null,
* MaxUploads?: int|null,
* Prefix?: string|null,
* UploadIdMarker?: string|null,
* ExpectedBucketOwner?: string|null,
* RequestPayer?: RequestPayer::*|null,
* '@region'?: string|null,
* }|ListMultipartUploadsRequest $input
*/
public static function create($input): self
{
return $input instanceof self ? $input : new self($input);
}
public function getBucket(): ?string
{
return $this->bucket;
}
public function getDelimiter(): ?string
{
return $this->delimiter;
}
/**
* @return EncodingType::*|null
*/
public function getEncodingType(): ?string
{
return $this->encodingType;
}
public function getExpectedBucketOwner(): ?string
{
return $this->expectedBucketOwner;
}
public function getKeyMarker(): ?string
{
return $this->keyMarker;
}
public function getMaxUploads(): ?int
{
return $this->maxUploads;
}
public function getPrefix(): ?string
{
return $this->prefix;
}
/**
* @return RequestPayer::*|null
*/
public function getRequestPayer(): ?string
{
return $this->requestPayer;
}
public function getUploadIdMarker(): ?string
{
return $this->uploadIdMarker;
}
/**
* @internal
*/
public function request(): Request
{
// Prepare headers
$headers = ['content-type' => 'application/xml'];
if (null !== $this->expectedBucketOwner) {
$headers['x-amz-expected-bucket-owner'] = $this->expectedBucketOwner;
}
if (null !== $this->requestPayer) {
if (!RequestPayer::exists($this->requestPayer)) {
/** @psalm-suppress NoValue */
throw new InvalidArgument(\sprintf('Invalid parameter "RequestPayer" for "%s". The value "%s" is not a valid "RequestPayer".', __CLASS__, $this->requestPayer));
}
$headers['x-amz-request-payer'] = $this->requestPayer;
}
// Prepare query
$query = [];
if (null !== $this->delimiter) {
$query['delimiter'] = $this->delimiter;
}
if (null !== $this->encodingType) {
if (!EncodingType::exists($this->encodingType)) {
/** @psalm-suppress NoValue */
throw new InvalidArgument(\sprintf('Invalid parameter "EncodingType" for "%s". The value "%s" is not a valid "EncodingType".', __CLASS__, $this->encodingType));
}
$query['encoding-type'] = $this->encodingType;
}
if (null !== $this->keyMarker) {
$query['key-marker'] = $this->keyMarker;
}
if (null !== $this->maxUploads) {
$query['max-uploads'] = (string) $this->maxUploads;
}
if (null !== $this->prefix) {
$query['prefix'] = $this->prefix;
}
if (null !== $this->uploadIdMarker) {
$query['upload-id-marker'] = $this->uploadIdMarker;
}
// Prepare URI
$uri = [];
if (null === $v = $this->bucket) {
throw new InvalidArgument(\sprintf('Missing parameter "Bucket" for "%s". The value cannot be null.', __CLASS__));
}
$uri['Bucket'] = $v;
$uriString = '/' . rawurlencode($uri['Bucket']) . '?uploads';
// Prepare Body
$body = '';
// Return the Request
return new Request('GET', $uriString, $query, $headers, StreamFactory::create($body));
}
public function setBucket(?string $value): self
{
$this->bucket = $value;
return $this;
}
public function setDelimiter(?string $value): self
{
$this->delimiter = $value;
return $this;
}
/**
* @param EncodingType::*|null $value
*/
public function setEncodingType(?string $value): self
{
$this->encodingType = $value;
return $this;
}
public function setExpectedBucketOwner(?string $value): self
{
$this->expectedBucketOwner = $value;
return $this;
}
public function setKeyMarker(?string $value): self
{
$this->keyMarker = $value;
return $this;
}
public function setMaxUploads(?int $value): self
{
$this->maxUploads = $value;
return $this;
}
public function setPrefix(?string $value): self
{
$this->prefix = $value;
return $this;
}
/**
* @param RequestPayer::*|null $value
*/
public function setRequestPayer(?string $value): self
{
$this->requestPayer = $value;
return $this;
}
public function setUploadIdMarker(?string $value): self
{
$this->uploadIdMarker = $value;
return $this;
}
}