/* * Copyright 2010-2013 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 PutObject operation. /// Adds an object to a bucket. /// public partial class PutObjectRequest : PutWithACLRequest { private S3CannedACL cannedACL; private string bucketName; private string key; private S3StorageClass storageClass; private string websiteRedirectLocation; private HeadersCollection headersCollection = new HeadersCollection(); private MetadataCollection metadataCollection = new MetadataCollection(); private ServerSideEncryptionMethod serverSideEncryption; private ServerSideEncryptionCustomerMethod serverSideCustomerEncryption; private string serverSideEncryptionCustomerProvidedKey; private string serverSideEncryptionCustomerProvidedKeyMD5; private string serverSideEncryptionKeyManagementServiceKeyId; private string serverSideEncryptionKeyManagementServiceEncryptionContext; private Stream inputStream; private string filePath; private string contentBody; private bool autoCloseStream = true; private ObjectLockLegalHoldStatus objectLockLegalHoldStatus; private ObjectLockMode objectLockMode; private DateTime? objectLockRetainUntilDate; private bool autoResetStreamPosition = true; private bool useChunkEncoding = true; private RequestPayer requestPayer; private string md5Digest; private List tagset = new List(); /// /// A canned access control list (CACL) to apply to the object. /// Please refer to for /// information on S3 Canned ACLs. /// 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; } /// /// Input stream for the request; content for the request will be read from the stream. /// public Stream InputStream { get { return this.inputStream; } set { this.inputStream = value; } } // Check to see if Body property is set internal bool IsSetInputStream() { return this.inputStream != null; } /// /// /// The full path and name to a file to be uploaded. /// If this is set the request will upload the specified file to S3. /// /// /// For WinRT and Windows Phone this property must be in the form of "ms-appdata:///local/file.txt". /// /// public string FilePath { get { return this.filePath; } set { this.filePath = value; } } /// /// Text content to be uploaded. Use this property if you want to upload plaintext to S3. /// The content type will be set to 'text/plain'. /// public string ContentBody { get { return this.contentBody; } set { this.contentBody = value; } } /// /// If this value is set to true then the stream used with this request will be closed when all the content /// is read from the stream. /// Default: true. /// public bool AutoCloseStream { get { return this.autoCloseStream; } set { this.autoCloseStream = value; } } /// /// If this value is set to true then the stream will be seeked back to the start before being read for upload. /// Default: true. /// public bool AutoResetStreamPosition { get { return this.autoResetStreamPosition; } set { this.autoResetStreamPosition = value; } } /// /// If this value is set to true then a chunked encoding upload will be used for the request. /// Default: true. /// public bool UseChunkEncoding { get { return this.useChunkEncoding; } set { this.useChunkEncoding = value; } } /// /// Bucket name to which the PUT operation was initiated. /// When using this API 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 operation using an access point through the AWS 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 Simple Storage Service Developer Guide. /// public string BucketName { get { return this.bucketName; } set { this.bucketName = value; } } // Check to see if Bucket property is set internal bool IsSetBucket() { return this.bucketName != 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; } } /// /// 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 Key property. This key is used to identify the object in S3. /// 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 Server-side encryption algorithm used when storing this object in S3. /// /// public ServerSideEncryptionMethod ServerSideEncryptionMethod { get { return this.serverSideEncryption; } set { this.serverSideEncryption = value; } } // Check to see if ServerSideEncryption property is set internal bool IsSetServerSideEncryptionMethod() { return this.serverSideEncryption != null && this.serverSideEncryption != ServerSideEncryptionMethod.None; } /// /// 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. /// /// 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); } /// /// The id of the AWS Key Management Service key that Amazon S3 should use to encrypt and decrypt the object. /// If a key id is not specified, the default key will be used for encryption and decryption. /// 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); } /// /// 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. /// 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); } /// /// The type of storage to use for the object. Defaults to 'STANDARD'. /// /// 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; } /// /// Gets and sets the property ObjectLockLegalHoldStatus. /// /// The Legal Hold status that you want to apply to the specified 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. /// /// The Object Lock mode that you want to apply to this 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. /// /// The date and time when you want this object's 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; } /// /// 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; } /// /// Attach a callback that will be called as data is being sent to the AWS Service. /// public EventHandler StreamTransferProgress { get { return ((Amazon.Runtime.Internal.IAmazonWebServiceRequest)this).StreamUploadProgressCallback; } set { ((Amazon.Runtime.Internal.IAmazonWebServiceRequest)this).StreamUploadProgressCallback = value; } } /// /// This is a convenience property for Headers.ContentType. /// public string ContentType { get { return this.Headers.ContentType; } set { this.Headers.ContentType = value; } } /// /// An MD5 digest for the content. /// /// /// /// The base64 encoded 128-bit MD5 digest of the message /// (without the headers) according to RFC 1864. This header /// can be used as a message integrity check to verify that /// the data is the same data that was originally sent. /// /// /// If supplied, after the file has been uploaded to S3, /// S3 checks to ensure that the MD5 hash of the uploaded file /// matches the hash supplied. /// /// /// Although it is optional, we recommend using the /// Content-MD5 mechanism as an end-to-end integrity check. /// /// public string MD5Digest { get { return this.md5Digest; } set { this.md5Digest = value; } } /// /// Checks if MD5Digest property is set. /// /// true if MD5Digest property is set. internal bool IsSetMD5Digest() { return !System.String.IsNullOrEmpty(this.md5Digest); } /// /// Overriden to turn off sending SHA256 header. /// protected override bool IncludeSHA256Header { get { return false; } } /// /// Overriden to turn on expect 100 continue. /// protected override bool Expect100Continue { get { return true; } } /// /// Confirms that the requester knows that she or he will be charged for the list objects 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 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); } } }