/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.S3.Model
{
///
/// Container for the parameters to the InitiateMultipartUpload operation.
/// This action initiates a multipart upload and returns an upload ID. This upload ID
/// is used to associate all of the parts in the specific multipart upload. You specify
/// this upload ID in each of your subsequent upload part requests (see UploadPart).
/// You also include this upload ID in the final request to either complete or abort the
/// multipart upload request.
///
///
///
/// For more information about multipart uploads, see Multipart
/// Upload Overview.
///
///
///
/// If you have configured a lifecycle rule to abort incomplete multipart uploads, the
/// upload must complete within the number of days specified in the bucket lifecycle configuration.
/// Otherwise, the incomplete multipart upload becomes eligible for an abort action and
/// Amazon S3 aborts the multipart upload. For more information, see Aborting
/// Incomplete Multipart Uploads Using a Bucket Lifecycle Policy.
///
///
///
/// For information about the permissions required to use the multipart upload API, see
/// Multipart
/// Upload and Permissions.
///
///
///
/// For request signing, multipart upload is just a series of regular requests. You initiate
/// a multipart upload, send one or more requests to upload parts, and then complete the
/// multipart upload process. You sign each request individually. There is nothing special
/// about signing multipart upload requests. For more information about signing, see Authenticating
/// Requests (Amazon Web Services Signature Version 4).
///
///
///
/// After you initiate a multipart upload and upload one or more parts, to stop being
/// charged for storing the uploaded parts, you must either complete or abort the multipart
/// upload. Amazon S3 frees up the space used to store the parts and stop charging you
/// for storing them only after you either complete or abort a multipart upload.
///
///
///
/// You can optionally request server-side encryption. For server-side encryption, Amazon
/// S3 encrypts your data as it writes it to disks in its data centers and decrypts it
/// when you access it. You can provide your own encryption key, or use Amazon Web Services
/// Key Management Service (Amazon Web Services KMS) customer master keys (CMKs) or Amazon
/// S3-managed encryption keys. If you choose to provide your own encryption key, the
/// request headers you provide in UploadPart
/// and UploadPartCopy
/// requests must match the headers you used in the request to initiate the upload by
/// using CreateMultipartUpload
.
///
///
///
/// To perform a multipart upload with encryption using an Amazon Web Services KMS CMK,
/// the requester must have permission to the kms:Decrypt
and kms:GenerateDataKey*
/// actions on the key. These permissions are required because Amazon S3 must decrypt
/// and read data from the encrypted file parts before it completes the multipart upload.
/// For more information, see Multipart
/// upload API and permissions in the Amazon S3 User Guide.
///
///
///
/// If your Identity and Access Management (IAM) user or role is in the same Amazon Web
/// Services account as the Amazon Web Services KMS CMK, then you must have these permissions
/// on the key policy. If your IAM user or role belongs to a different account than the
/// key, then you must have the permissions on both the key policy and your IAM user or
/// role.
///
///
///
/// For more information, see Protecting
/// Data Using Server-Side Encryption.
///
/// - Access Permissions
-
///
/// When copying an object, you can optionally specify the accounts or groups that should
/// be granted specific permissions on the new object. There are two ways to grant the
/// permissions using the request headers:
///
///
-
///
/// Specify a canned ACL with the
x-amz-acl
request header. For more information,
/// see Canned
/// ACL.
///
/// -
///
/// Specify access permissions explicitly with the
x-amz-grant-read
, x-amz-grant-read-acp
,
/// x-amz-grant-write-acp
, and x-amz-grant-full-control
headers.
/// These parameters map to the set of permissions that Amazon S3 supports in an ACL.
/// For more information, see Access
/// Control List (ACL) Overview.
///
///
///
/// You can use either a canned ACL or specify access permissions explicitly. You cannot
/// do both.
///
/// - Server-Side- Encryption-Specific Request Headers
-
///
/// You can optionally tell Amazon S3 to encrypt data at rest using server-side encryption.
/// Server-side encryption is for data encryption at rest. Amazon S3 encrypts your data
/// as it writes it to disks in its data centers and decrypts it when you access it. The
/// option you use depends on whether you want to use Amazon Web Services managed encryption
/// keys or provide your own encryption key.
///
///
-
///
/// Use encryption keys managed by Amazon S3 or customer master keys (CMKs) stored in
/// Amazon Web Services Key Management Service (Amazon Web Services KMS) – If you want
/// Amazon Web Services to manage the keys used to encrypt data, specify the following
/// headers in the request.
///
///
-
///
/// x-amz-server-side-encryption
///
///
-
///
/// x-amz-server-side-encryption-aws-kms-key-id
///
///
-
///
/// x-amz-server-side-encryption-context
///
///
///
/// If you specify x-amz-server-side-encryption:aws:kms
, but don't provide
/// x-amz-server-side-encryption-aws-kms-key-id
, Amazon S3 uses the Amazon
/// Web Services managed CMK in Amazon Web Services KMS to protect the data.
///
///
///
/// All GET and PUT requests for an object protected by Amazon Web Services KMS fail if
/// you don't make them with SSL or by using SigV4.
///
///
///
/// For more information about server-side encryption with CMKs stored in Amazon Web Services
/// KMS (SSE-KMS), see Protecting
/// Data Using Server-Side Encryption with CMKs stored in Amazon Web Services KMS.
///
/// -
///
/// Use customer-provided encryption keys – If you want to manage your own encryption
/// keys, provide all the following headers in the request.
///
///
-
///
/// x-amz-server-side-encryption-customer-algorithm
///
///
-
///
/// x-amz-server-side-encryption-customer-key
///
///
-
///
/// x-amz-server-side-encryption-customer-key-MD5
///
///
///
/// For more information about server-side encryption with CMKs stored in Amazon Web Services
/// KMS (SSE-KMS), see Protecting
/// Data Using Server-Side Encryption with CMKs stored in Amazon Web Services KMS.
///
///
- Access-Control-List (ACL)-Specific Request Headers
-
///
///
/// You also can use the following access control–related headers with this operation.
/// By default, all objects are private. Only the owner has full access control. When
/// adding a new object, you can grant permissions to individual Amazon Web Services accounts
/// or to predefined groups defined by Amazon S3. These permissions are then added to
/// the access control list (ACL) on the object. For more information, see Using
/// ACLs. With this operation, you can grant access permissions using one of the following
/// two methods:
///
///
-
///
/// Specify a canned ACL (
x-amz-acl
) — Amazon S3 supports a set of predefined
/// ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees
/// and permissions. For more information, see Canned
/// ACL.
///
/// -
///
/// Specify access permissions explicitly — To explicitly grant access permissions to
/// specific Amazon Web Services accounts or groups, use the following headers. Each header
/// maps to specific permissions that Amazon S3 supports in an ACL. For more information,
/// see Access
/// Control List (ACL) Overview. In the header, you specify a list of grantees who
/// get the specific permission. To grant permissions explicitly, use:
///
///
-
///
/// x-amz-grant-read
///
///
-
///
/// x-amz-grant-write
///
///
-
///
/// x-amz-grant-read-acp
///
///
-
///
/// x-amz-grant-write-acp
///
///
-
///
/// x-amz-grant-full-control
///
///
///
/// You specify each grantee as a type=value pair, where the type is one of the following:
///
/// -
///
///
id
– if the value specified is the canonical user ID of an Amazon Web
/// Services account
///
/// -
///
///
uri
– if you are granting permissions to a predefined group
///
/// -
///
///
emailAddress
– if the value specified is the email address of an Amazon
/// Web Services account
///
///
///
/// Using email addresses to specify a grantee is only supported in the following Amazon
/// Web Services Regions:
///
/// -
///
/// US East (N. Virginia)
///
///
-
///
/// US West (N. California)
///
///
-
///
/// US West (Oregon)
///
///
-
///
/// Asia Pacific (Singapore)
///
///
-
///
/// Asia Pacific (Sydney)
///
///
-
///
/// Asia Pacific (Tokyo)
///
///
-
///
/// Europe (Ireland)
///
///
-
///
/// South America (São Paulo)
///
///
///
/// For a list of all the Amazon S3 supported Regions and endpoints, see Regions
/// and Endpoints in the Amazon Web Services General Reference.
///
///
///
/// For example, the following x-amz-grant-read
header grants the Amazon
/// Web Services accounts identified by account IDs permissions to read object data and
/// its metadata:
///
///
///
/// x-amz-grant-read: id="11112222333", id="444455556666"
///
///
///
/// The following operations are related to CreateMultipartUpload
:
///
///
///
public partial class InitiateMultipartUploadRequest : PutWithACLRequest
{
private S3CannedACL cannedACL;
private bool? bucketKeyEnabled;
private string bucketName;
private string expectedBucketOwner;
private string key;
private HeadersCollection headersCollection = new HeadersCollection();
private MetadataCollection metadataCollection = new MetadataCollection();
private ObjectLockLegalHoldStatus objectLockLegalHoldStatus;
private ObjectLockMode objectLockMode;
private DateTime? objectLockRetainUntilDate;
private RequestPayer requestPayer;
private ServerSideEncryptionMethod serverSideEncryption;
private ServerSideEncryptionCustomerMethod serverSideCustomerEncryption;
private string serverSideEncryptionCustomerProvidedKey;
private string serverSideEncryptionCustomerProvidedKeyMD5;
private string serverSideEncryptionKeyManagementServiceKeyId;
private string serverSideEncryptionKeyManagementServiceEncryptionContext;
private S3StorageClass storageClass;
private List tagset = new List();
private string websiteRedirectLocation;
private ChecksumAlgorithm _checksumAlgorithm;
///
/// A canned access control list (ACL) to apply to the object.
/// Please refer to for information on S3 Canned ACLs.
/// This action is not supported by Amazon S3 on Outposts.
///
public S3CannedACL CannedACL
{
get { return this.cannedACL; }
set { this.cannedACL = value; }
}
// Check to see if CannedACL property is set
internal bool IsSetCannedACL()
{
return cannedACL != null && cannedACL != S3CannedACL.NoACL;
}
///
/// Gets and sets the property BucketKeyEnabled.
///
/// Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with
/// server-side encryption using AWS KMS (SSE-KMS). Setting this header to true
/// causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS.
///
///
///
/// Specifying this header with an object action doesn't affect bucket-level settings
/// for S3 Bucket Key.
///
///
public bool BucketKeyEnabled
{
get { return this.bucketKeyEnabled.GetValueOrDefault(); }
set { this.bucketKeyEnabled = value; }
}
// Check to see if BucketKeyEnabled property is set
internal bool IsSetBucketKeyEnabled()
{
return bucketKeyEnabled.HasValue;
}
///
/// Gets and sets the property BucketName.
///
/// The name of the bucket to which to initiate the upload
///
///
///
/// When using this action with an access point, 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 in the Amazon S3 User Guide.
///
///
///
/// When you use this action with Amazon 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 through the Amazon Web Services SDKs,
/// you provide the Outposts access point ARN in place of the bucket name. For more information
/// about S3 on Outposts ARNs, see What
/// is S3 on Outposts? in the Amazon S3 User Guide.
///
///
public string BucketName
{
get { return this.bucketName; }
set { this.bucketName = value; }
}
// Check to see if BucketName property is set
internal bool IsSetBucketName()
{
return this.bucketName != null;
}
///
/// This is a convenience property for Headers.ContentType.
///
public string ContentType
{
get { return this.Headers.ContentType; }
set { this.Headers.ContentType = value; }
}
///
/// Gets and sets the property ExpectedBucketOwner.
///
/// The account ID of the expected bucket owner. If the bucket is owned by a different
/// account, the request will fail with an HTTP 403 (Access Denied)
error.
///
///
public string ExpectedBucketOwner
{
get { return this.expectedBucketOwner; }
set { this.expectedBucketOwner = value; }
}
// Check to see if ExpectedBucketOwner property is set
internal bool IsSetExpectedBucketOwner()
{
return !String.IsNullOrEmpty(this.expectedBucketOwner);
}
///
/// The key of the object to create or update.
///
///
/// This property will be used as part of the resource path of the HTTP request. In .NET the System.Uri class
/// is used to construct the uri for the request. The System.Uri class will canonicalize the uri string by compacting characters like "..". /// For example an object key of "foo/../bar/file.txt" will be transformed into "bar/file.txt" because the ".."
/// is interpreted as use parent directory. For further information view the documentation for
/// the Uri class: https://docs.microsoft.com/en-us/dotnet/api/system.uri
///
public string Key
{
get { return this.key; }
set { this.key = value; }
}
// Check to see if Key property is set
internal bool IsSetKey()
{
return this.key != null;
}
///
/// The collection of meta data for the request.
///
public MetadataCollection Metadata
{
get
{
if (this.metadataCollection == null)
this.metadataCollection = new MetadataCollection();
return this.metadataCollection;
}
internal set { this.metadataCollection = value; }
}
///
/// Gets and sets the property ObjectLockLegalHoldStatus.
///
/// Specifies whether you want to apply a Legal Hold to the uploaded object.
///
///
public ObjectLockLegalHoldStatus ObjectLockLegalHoldStatus
{
get { return this.objectLockLegalHoldStatus; }
set { this.objectLockLegalHoldStatus = value; }
}
// Check to see if ObjectLockLegalHoldStatus property is set
internal bool IsSetObjectLockLegalHoldStatus()
{
return this.objectLockLegalHoldStatus != null;
}
///
/// Gets and sets the property ObjectLockMode.
///
/// Specifies the Object Lock mode that you want to apply to the uploaded object.
///
///
public ObjectLockMode ObjectLockMode
{
get { return this.objectLockMode; }
set { this.objectLockMode = value; }
}
// Check to see if ObjectLockMode property is set
internal bool IsSetObjectLockMode()
{
return this.objectLockMode != null;
}
///
/// Gets and sets the property ObjectLockRetainUntilDate.
///
/// Specifies the date and time when you want the Object Lock to expire.
///
///
public DateTime ObjectLockRetainUntilDate
{
get { return this.objectLockRetainUntilDate.GetValueOrDefault(); }
set { this.objectLockRetainUntilDate = value; }
}
// Check to see if ObjectLockRetainUntilDate property is set
internal bool IsSetObjectLockRetainUntilDate()
{
return this.objectLockRetainUntilDate.HasValue;
}
///
/// Confirms that the requester knows that she or he will be charged for the request.
/// Bucket owners need not specify this parameter in their requests.
///
public RequestPayer RequestPayer
{
get { return this.requestPayer; }
set { this.requestPayer = value; }
}
///
/// Checks to see if RequetsPayer is set.
///
/// true, if RequestPayer property is set.
internal bool IsSetRequestPayer()
{
return requestPayer != null;
}
///
///
/// The server-side encryption algorithm used when storing this object in Amazon S3 (for
/// example, AES256, aws:kms
).
///
///
public ServerSideEncryptionMethod ServerSideEncryptionMethod
{
get { return this.serverSideEncryption; }
set { this.serverSideEncryption = value; }
}
// Check to see if ServerSideEncryptionMethod property is set
internal bool IsSetServerSideEncryptionMethod()
{
return this.serverSideEncryption != null && this.serverSideEncryption != ServerSideEncryptionMethod.None;
}
///
///
/// Specifies the ID of the symmetric encryption customer managed key to use for object
/// encryption. All GET and PUT requests for an object protected by Amazon Web Services
/// KMS will fail if not made via SSL or using SigV4. For information about configuring
/// using any of the officially supported Amazon Web Services SDKs and Amazon Web Services
/// CLI, see Specifying
/// the Signature Version in Request Authentication in the Amazon S3 User Guide.
///
///
[AWSProperty(Sensitive=true)]
public string ServerSideEncryptionKeyManagementServiceKeyId
{
get { return this.serverSideEncryptionKeyManagementServiceKeyId; }
set { this.serverSideEncryptionKeyManagementServiceKeyId = value; }
}
///
/// Checks if ServerSideEncryptionKeyManagementServiceKeyId property is set.
///
/// true if ServerSideEncryptionKeyManagementServiceKeyId property is set.
internal bool IsSetServerSideEncryptionKeyManagementServiceKeyId()
{
return !System.String.IsNullOrEmpty(this.serverSideEncryptionKeyManagementServiceKeyId);
}
///
/// The Server-side encryption algorithm to be used with the customer provided key.
///
///
public ServerSideEncryptionCustomerMethod ServerSideEncryptionCustomerMethod
{
get { return this.serverSideCustomerEncryption; }
set { this.serverSideCustomerEncryption = value; }
}
// Check to see if ServerSideEncryptionCustomerMethod property is set
internal bool IsSetServerSideEncryptionCustomerMethod()
{
return this.serverSideCustomerEncryption != null && this.serverSideCustomerEncryption != ServerSideEncryptionCustomerMethod.None;
}
///
/// The base64-encoded encryption key for Amazon S3 to use to encrypt the object
///
/// Using the encryption key you provide as part of your request Amazon S3 manages both the encryption, as it writes
/// to disks, and decryption, when you access your objects. Therefore, you don't need to maintain any data encryption code. The only
/// thing you do is manage the encryption keys you provide.
///
///
/// When you retrieve an object, you must provide the same encryption key as part of your request. Amazon S3 first verifies
/// the encryption key you provided matches, and then decrypts the object before returning the object data to you.
///
///
/// Important: Amazon S3 does not store the encryption key you provide.
///
///
[AWSProperty(Sensitive=true)]
public string ServerSideEncryptionCustomerProvidedKey
{
get { return this.serverSideEncryptionCustomerProvidedKey; }
set { this.serverSideEncryptionCustomerProvidedKey = value; }
}
///
/// Checks if ServerSideEncryptionCustomerProvidedKey property is set.
///
/// true if ServerSideEncryptionCustomerProvidedKey property is set.
internal bool IsSetServerSideEncryptionCustomerProvidedKey()
{
return !System.String.IsNullOrEmpty(this.serverSideEncryptionCustomerProvidedKey);
}
///
/// The MD5 of the customer encryption key specified in the ServerSideEncryptionCustomerProvidedKey property. The MD5 is
/// base 64 encoded. This field is optional, the SDK will calculate the MD5 if this is not set.
///
public string ServerSideEncryptionCustomerProvidedKeyMD5
{
get { return this.serverSideEncryptionCustomerProvidedKeyMD5; }
set { this.serverSideEncryptionCustomerProvidedKeyMD5 = value; }
}
///
/// Checks if ServerSideEncryptionCustomerProvidedKeyMD5 property is set.
///
/// true if ServerSideEncryptionCustomerProvidedKey property is set.
internal bool IsSetServerSideEncryptionCustomerProvidedKeyMD5()
{
return !System.String.IsNullOrEmpty(this.serverSideEncryptionCustomerProvidedKeyMD5);
}
///
/// Specifies the AWS KMS Encryption Context to use for object encryption.
/// The value of this header is a base64-encoded UTF-8 string holding JSON with the encryption context key-value pairs.
///
/// Specifies the Amazon Web Services KMS Encryption Context to use for object encryption.
/// The value of this header is a base64-encoded UTF-8 string holding JSON with the encryption
/// context key-value pairs.
///
///
[AWSProperty(Sensitive=true)]
public string ServerSideEncryptionKeyManagementServiceEncryptionContext
{
get { return this.serverSideEncryptionKeyManagementServiceEncryptionContext; }
set { this.serverSideEncryptionKeyManagementServiceEncryptionContext = value; }
}
///
/// Checks if ServerSideEncryptionKeyManagementServiceEncryptionContext property is set.
///
/// true if ServerSideEncryptionKeyManagementServiceEncryptionContext property is set.
internal bool IsSetServerSideEncryptionKeyManagementServiceEncryptionContext()
{
return !System.String.IsNullOrEmpty(this.serverSideEncryptionKeyManagementServiceEncryptionContext);
}
///
/// Gets and sets the property StorageClass.
///
/// By default, Amazon S3 uses the STANDARD Storage Class to store newly created objects.
/// The STANDARD storage class provides high durability and high availability. Depending
/// on performance needs, you can specify a different Storage Class. Amazon S3 on Outposts
/// only uses the OUTPOSTS Storage Class. For more information, see Storage
/// Classes in the Amazon S3 User Guide.
///
///
public S3StorageClass StorageClass
{
get { return this.storageClass; }
set { this.storageClass = value; }
}
// Check to see if StorageClass property is set
internal bool IsSetStorageClass()
{
return this.storageClass != null;
}
///
/// The tag-set for the object. The tag-set must be encoded as URL Query parameters.
///
public List TagSet
{
get { return this.tagset; }
set { this.tagset = value; }
}
///
/// Checks if Tagging property is set
///
/// true if Tagging is set.
internal bool IsSetTagSet()
{
return (this.tagset != null) && (this.tagset.Count > 0);
}
///
/// Gets and sets the property WebsiteRedirectLocation.
///
/// If the bucket is configured as a website, redirects requests for this object to another
/// object in the same bucket or to an external URL. Amazon S3 stores the value of this
/// header in the object metadata.
///
///
public string WebsiteRedirectLocation
{
get { return this.websiteRedirectLocation; }
set { this.websiteRedirectLocation = value; }
}
// Check to see if WebsiteRedirectLocation property is set
internal bool IsSetWebsiteRedirectLocation()
{
return this.websiteRedirectLocation != null;
}
///
/// The collection of headers for the request.
///
public HeadersCollection Headers
{
get
{
if (this.headersCollection == null)
this.headersCollection = new HeadersCollection();
return this.headersCollection;
}
internal set { this.headersCollection = value; }
}
///
/// Gets and sets the property ChecksumAlgorithm.
///
/// Indicates the algorithm you want Amazon S3 to use to create the checksum for the object.
/// For more information, see Checking
/// object integrity in the Amazon S3 User Guide.
///
///
public ChecksumAlgorithm ChecksumAlgorithm
{
get { return this._checksumAlgorithm; }
set { this._checksumAlgorithm = value; }
}
// Check to see if ChecksumAlgorithm property is set
internal bool IsSetChecksumAlgorithm()
{
return this._checksumAlgorithm != null;
}
///
/// Envelope Key to Encrypt data
///
internal byte[] EnvelopeKey { get; set; }
///
/// Encrypted Envelope Key to Encrypt data
///
internal byte[] EncryptedEnvelopeKey { get; set; }
///
/// Initialization Vector for encryption
///
internal byte[] IV { get; set; }
///
/// Storage mode for encryption information.
///
internal Amazon.S3.Encryption.CryptoStorageMode StorageMode { get; set; }
}
}