/* * 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; } } }