Put Object
s3_put_object | R Documentation |
Adds an object to a bucket¶
Description¶
Adds an object to a bucket.
-
Amazon S3 never adds partial objects; if you receive a success response, Amazon S3 added the entire object to the bucket. You cannot use
put_object
to only update a single piece of metadata for an existing object. You must put the entire object with updated metadata if you want to update some values. -
If your bucket uses the bucket owner enforced setting for Object Ownership, ACLs are disabled and no longer affect permissions. All objects written to the bucket by any account will be owned by the bucket owner.
-
Directory buckets - 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
https://amzn-s3-demo-bucket.s3express-zone-id.region-code.amazonaws.com/key-name
. Path-style requests are not supported. For more information about endpoints in Availability Zones, see Regional and Zonal endpoints for directory buckets in Availability Zones in the Amazon S3 User Guide. For more information about endpoints in Local Zones, see Concepts for directory buckets in Local Zones in the Amazon S3 User Guide.
Amazon S3 is a distributed system. If it receives multiple write requests for the same object simultaneously, it overwrites all but the last object written. However, Amazon S3 provides features that can modify this behavior:
-
S3 Object Lock - To prevent objects from being deleted or overwritten, you can use Amazon S3 Object Lock in the Amazon S3 User Guide.
This functionality is not supported for directory buckets.
-
If-None-Match - Uploads the object only if the object key name does not already exist in the specified bucket. Otherwise, Amazon S3 returns a
412 Precondition Failed
error. If a conflicting operation occurs during the upload, S3 returns a409 ConditionalRequestConflict
response. On a 409 failure, retry the upload.Expects the * character (asterisk).
For more information, see Add preconditions to S3 operations with conditional requests in the Amazon S3 User Guide or RFC 7232.
This functionality is not supported for S3 on Outposts.
-
S3 Versioning - When you enable versioning for a bucket, if Amazon S3 receives multiple write requests for the same object simultaneously, it stores all versions of the objects. For each write request that is made to the same object, Amazon S3 automatically generates a unique version ID of that object being stored in Amazon S3. You can retrieve, replace, or delete any version of the object. For more information about versioning, see Adding Objects to Versioning-Enabled Buckets in the Amazon S3 User Guide. For information about returning the versioning state of a bucket, see
get_bucket_versioning
.This functionality is not supported for directory buckets.
Permissions¶
-
General purpose bucket permissions - The following permissions are required in your policies when your
put_object
request includes specific headers.-
s3:PutObject
- To successfully complete theput_object
request, you must always have thes3:PutObject
permission on a bucket to add an object to it. -
s3:PutObjectAcl
- To successfully change the objects ACL of yourput_object
request, you must have thes3:PutObjectAcl
. -
s3:PutObjectTagging
- To successfully set the tag-set with yourput_object
request, you must have thes3:PutObjectTagging
.
-
-
Directory bucket permissions - To grant access to this API operation on a directory bucket, we recommend that you use the
create_session
API operation for session-based authorization. Specifically, you grant thes3express:CreateSession
permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make thecreate_session
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 anothercreate_session
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, seecreate_session
.If the object is encrypted with SSE-KMS, you must also have the
kms:GenerateDataKey
andkms:Decrypt
permissions in IAM identity-based policies and KMS key policies for the KMS key.
Data integrity with Content-MD5¶
-
General purpose bucket - To ensure that data is not corrupted traversing the network, use the
Content-MD5
header. When you use this header, Amazon S3 checks the object against the provided MD5 value and, if they do not match, Amazon S3 returns an error. Alternatively, when the object's ETag is its MD5 digest, you can calculate the MD5 while putting the object to Amazon S3 and compare the returned ETag to the calculated MD5 value. -
Directory bucket - This functionality is not supported for directory buckets.
HTTP Host header syntax¶
Directory buckets - The HTTP Host header syntax is
Bucket-name.s3express-zone-id.region-code.amazonaws.com
.
For more information about related Amazon S3 APIs, see the following:
-
copy_object
-
delete_object
Usage¶
s3_put_object(ACL, Body, Bucket, CacheControl, ContentDisposition,
ContentEncoding, ContentLanguage, ContentLength, ContentMD5,
ContentType, ChecksumAlgorithm, ChecksumCRC32, ChecksumCRC32C,
ChecksumCRC64NVME, ChecksumSHA1, ChecksumSHA256, Expires, IfMatch,
IfNoneMatch, GrantFullControl, GrantRead, GrantReadACP, GrantWriteACP,
Key, WriteOffsetBytes, Metadata, ServerSideEncryption, StorageClass,
WebsiteRedirectLocation, SSECustomerAlgorithm, SSECustomerKey,
SSECustomerKeyMD5, SSEKMSKeyId, SSEKMSEncryptionContext,
BucketKeyEnabled, RequestPayer, Tagging, ObjectLockMode,
ObjectLockRetainUntilDate, ObjectLockLegalHoldStatus,
ExpectedBucketOwner)
Arguments¶
ACL |
The canned ACL to apply to the object. For more information, see Canned ACL in the Amazon S3 User Guide. When adding a new object, you can use headers to grant ACL-based permissions to individual Amazon Web Services accounts or to predefined groups defined by Amazon S3. These permissions are then added to the ACL on the object. By default, all objects are private. Only the owner has full access control. For more information, see Access Control List (ACL) Overview and Managing ACLs Using the REST API in the Amazon S3 User Guide. If the bucket that you're uploading objects to uses the bucket owner
enforced setting for S3 Object Ownership, ACLs are disabled and no
longer affect permissions. Buckets that use this setting only accept PUT
requests that don't specify an ACL or PUT requests that specify bucket
owner full control ACLs, such as the
|
Body |
Object data. |
Bucket |
[required] The bucket name to which the PUT action was initiated. Directory buckets - When you use this operation with
a directory bucket, you must use virtual-hosted-style requests in the
format
Access points - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. 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 in the Amazon S3 User Guide. Access points and 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
|
CacheControl |
Can be used to specify caching behavior along the request/reply chain. For more information, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9. |
ContentDisposition |
Specifies presentational information for the object. For more information, see https://www.rfc-editor.org/rfc/rfc6266#section-4. |
ContentEncoding |
Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field. For more information, see https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding. |
ContentLanguage |
The language the content is in. |
ContentLength |
Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically. For more information, see https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length. |
ContentMD5 |
The Base64 encoded 128-bit The This functionality is not supported for directory buckets. |
ContentType |
A standard MIME type describing the format of the contents. For more information, see https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type. |
ChecksumAlgorithm |
Indicates the algorithm used to create the checksum for the
object when you use the SDK. This header will not provide any additional
functionality if you don't use the SDK. When you send this header, there
must be a corresponding For the
For more information, see Checking object integrity in the Amazon S3 User Guide. If the individual checksum value you provide through
The For directory buckets, when you use Amazon Web Services SDKs,
|
ChecksumCRC32 |
This header can be used as a data integrity check to verify that
the data received is the same data that was originally sent. This header
specifies the Base64 encoded, 32-bit |
ChecksumCRC32C |
This header can be used as a data integrity check to verify that
the data received is the same data that was originally sent. This header
specifies the Base64 encoded, 32-bit |
ChecksumCRC64NVME |
This header can be used as a data integrity check to verify that
the data received is the same data that was originally sent. This header
specifies the Base64 encoded, 64-bit |
ChecksumSHA1 |
This header can be used as a data integrity check to verify that
the data received is the same data that was originally sent. This header
specifies the Base64 encoded, 160-bit |
ChecksumSHA256 |
This header can be used as a data integrity check to verify that
the data received is the same data that was originally sent. This header
specifies the Base64 encoded, 256-bit |
Expires |
The date and time at which the object is no longer cacheable. For more information, see https://www.rfc-editor.org/rfc/rfc7234#section-5.3. |
IfMatch |
Uploads the object only if the ETag (entity tag) value provided
during the WRITE operation matches the ETag of the object in S3. If the
ETag values do not match, the operation returns a If a conflicting operation occurs during the upload S3 returns a
Expects the ETag value as a string. For more information about conditional requests, see RFC 7232, or Conditional requests in the Amazon S3 User Guide. |
IfNoneMatch |
Uploads the object only if the object key name does not already
exist in the bucket specified. Otherwise, Amazon S3 returns a If a conflicting operation occurs during the upload S3 returns a
Expects the '*' (asterisk) character. For more information about conditional requests, see RFC 7232, or Conditional requests in the Amazon S3 User Guide. |
GrantFullControl |
Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
|
GrantRead |
Allows grantee to read the object data and its metadata.
|
GrantReadACP |
Allows grantee to read the object ACL.
|
GrantWriteACP |
Allows grantee to write the ACL for the applicable object.
|
Key |
[required] Object key for which the PUT action was initiated. |
WriteOffsetBytes |
Specifies the offset for appending data to existing objects in bytes. The offset must be equal to the size of the existing object being appended to. If no object exists, setting this header to 0 will create a new object. This functionality is only supported for objects in the Amazon S3 Express One Zone storage class in directory buckets. |
Metadata |
A map of metadata to store with the object in S3. |
ServerSideEncryption |
The server-side encryption algorithm that was used when you store
this object in Amazon S3 (for example,
|
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. For more information, see Storage Classes in the Amazon S3 User Guide.
|
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. For information about object metadata, see Object Key and Metadata in the Amazon S3 User Guide. In the following example, the request header sets the redirect to an object (anotherPage.html) in the same bucket:
In the following example, the request header sets the object redirect to another website:
For more information about website hosting in Amazon S3, see Hosting Websites on Amazon S3 and How to Configure Website Page Redirects in the Amazon S3 User Guide. This functionality is not supported for directory buckets. |
SSECustomerAlgorithm |
Specifies the algorithm to use when encrypting the object (for
example, This functionality is not supported for directory buckets. |
SSECustomerKey |
Specifies the customer-provided encryption key for Amazon S3 to
use in encrypting data. This value is used to store the object and then
it is discarded; Amazon S3 does not store the encryption key. The key
must be appropriate for use with the algorithm specified in the
This functionality is not supported for directory buckets. |
SSECustomerKeyMD5 |
Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure that the encryption key was transmitted without error. This functionality is not supported for directory buckets. |
SSEKMSKeyId |
Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID. General purpose buckets - If you specify
Directory buckets - To encrypt data using SSE-KMS,
it's recommended to specify the
|
SSEKMSEncryptionContext |
Specifies the Amazon Web Services KMS Encryption Context as an
additional encryption context to use for object encryption. The value of
this header is a Base64 encoded string of a UTF-8 encoded JSON, which
contains the encryption context as key-value pairs. This value is stored
as object metadata and automatically gets passed on to Amazon Web
Services KMS for future General purpose buckets - This value must be
explicitly added during Directory buckets - You can optionally provide an explicit encryption context value. The value must match the default encryption context - the bucket Amazon Resource Name (ARN). An additional encryption context value is not supported. |
BucketKeyEnabled |
Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Key Management Service (KMS) keys (SSE-KMS). General purpose buckets - Setting this header to
Directory buckets - S3 Bucket Keys are always
enabled for |
RequestPayer |
|
Tagging |
The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, "Key1=Value1") This functionality is not supported for directory buckets. |
ObjectLockMode |
The Object Lock mode that you want to apply to this object. This functionality is not supported for directory buckets. |
ObjectLockRetainUntilDate |
The date and time when you want this object's Object Lock to expire. Must be formatted as a timestamp parameter. This functionality is not supported for directory buckets. |
ObjectLockLegalHoldStatus |
Specifies whether a legal hold will be applied to this object. For more information about S3 Object Lock, see Object Lock in the Amazon S3 User Guide. This functionality is not supported for directory buckets. |
ExpectedBucketOwner |
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 |
Value¶
A list with the following syntax:
list(
Expiration = "string",
ETag = "string",
ChecksumCRC32 = "string",
ChecksumCRC32C = "string",
ChecksumCRC64NVME = "string",
ChecksumSHA1 = "string",
ChecksumSHA256 = "string",
ChecksumType = "COMPOSITE"|"FULL_OBJECT",
ServerSideEncryption = "AES256"|"aws:kms"|"aws:kms:dsse",
VersionId = "string",
SSECustomerAlgorithm = "string",
SSECustomerKeyMD5 = "string",
SSEKMSKeyId = "string",
SSEKMSEncryptionContext = "string",
BucketKeyEnabled = TRUE|FALSE,
Size = 123,
RequestCharged = "requester"
)
Request syntax¶
svc$put_object(
ACL = "private"|"public-read"|"public-read-write"|"authenticated-read"|"aws-exec-read"|"bucket-owner-read"|"bucket-owner-full-control",
Body = raw,
Bucket = "string",
CacheControl = "string",
ContentDisposition = "string",
ContentEncoding = "string",
ContentLanguage = "string",
ContentLength = 123,
ContentMD5 = "string",
ContentType = "string",
ChecksumAlgorithm = "CRC32"|"CRC32C"|"SHA1"|"SHA256"|"CRC64NVME",
ChecksumCRC32 = "string",
ChecksumCRC32C = "string",
ChecksumCRC64NVME = "string",
ChecksumSHA1 = "string",
ChecksumSHA256 = "string",
Expires = as.POSIXct(
"2015-01-01"
),
IfMatch = "string",
IfNoneMatch = "string",
GrantFullControl = "string",
GrantRead = "string",
GrantReadACP = "string",
GrantWriteACP = "string",
Key = "string",
WriteOffsetBytes = 123,
Metadata = list(
"string"
),
ServerSideEncryption = "AES256"|"aws:kms"|"aws:kms:dsse",
StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"GLACIER"|"DEEP_ARCHIVE"|"OUTPOSTS"|"GLACIER_IR"|"SNOW"|"EXPRESS_ONEZONE",
WebsiteRedirectLocation = "string",
SSECustomerAlgorithm = "string",
SSECustomerKey = "string",
SSECustomerKeyMD5 = "string",
SSEKMSKeyId = "string",
SSEKMSEncryptionContext = "string",
BucketKeyEnabled = TRUE|FALSE,
RequestPayer = "requester",
Tagging = "string",
ObjectLockMode = "GOVERNANCE"|"COMPLIANCE",
ObjectLockRetainUntilDate = as.POSIXct(
"2015-01-01"
),
ObjectLockLegalHoldStatus = "ON"|"OFF",
ExpectedBucketOwner = "string"
)
Examples¶
## Not run:
# The following example creates an object. If the bucket is versioning
# enabled, S3 returns version ID in response.
svc$put_object(
Body = "filetoupload",
Bucket = "examplebucket",
Key = "objectkey"
)
# The following example uploads an object. The request specifies optional
# request headers to directs S3 to use specific storage class and use
# server-side encryption.
svc$put_object(
Body = "HappyFace.jpg",
Bucket = "examplebucket",
Key = "HappyFace.jpg",
ServerSideEncryption = "AES256",
StorageClass = "STANDARD_IA"
)
# The following example uploads and object. The request specifies optional
# canned ACL (access control list) to all READ access to authenticated
# users. If the bucket is versioning enabled, S3 returns version ID in
# response.
svc$put_object(
ACL = "authenticated-read",
Body = "filetoupload",
Bucket = "examplebucket",
Key = "exampleobject"
)
# The following example uploads an object to a versioning-enabled bucket.
# The source file is specified using Windows file syntax. S3 returns
# VersionId of the newly created object.
svc$put_object(
Body = "HappyFace.jpg",
Bucket = "examplebucket",
Key = "HappyFace.jpg"
)
# The following example creates an object. The request also specifies
# optional metadata. If the bucket is versioning enabled, S3 returns
# version ID in response.
svc$put_object(
Body = "filetoupload",
Bucket = "examplebucket",
Key = "exampleobject",
Metadata = list(
metadata1 = "value1",
metadata2 = "value2"
)
)
# The following example uploads an object. The request specifies optional
# object tags. The bucket is versioned, therefore S3 returns version ID of
# the newly created object.
svc$put_object(
Body = "c:\\HappyFace.jpg",
Bucket = "examplebucket",
Key = "HappyFace.jpg",
Tagging = "key1=value1&key2=value2"
)
# The following example uploads and object. The request specifies the
# optional server-side encryption option. The request also specifies
# optional object tags. If the bucket is versioning enabled, S3 returns
# version ID in response.
svc$put_object(
Body = "filetoupload",
Bucket = "examplebucket",
Key = "exampleobject",
ServerSideEncryption = "AES256",
Tagging = "key1=value1&key2=value2"
)
## End(Not run)