Copy an object

To copy an object, you make a PUT request that is scoped to the new bucket and object name and you specify the source object with the x-goog-copy-source request header. To copy an object to itself you must use the x-goog-metadata-directive header with a value of REPLACE and you must specify any object metadata for the copied object in your request.

If the source and destination buckets have different locations, the copy request incurs network usage charges.

If any of the conditional copy headers fail to match the condition you specify you will get a 412 Precondition Failed status code and the body of the error response will have PreconditionFailed in the Code element.

Query string parameters

This request does not typically include query string parameters.

See signed URL query string parameters for information on the parameters you include when creating and using signed URLs.

Request headers

In addition to common request headers, the following can be used.

Header Description Required
Content-Encoding The compression algorithm that was used to compress the object you are uploading. No
Content-Disposition A header you can set on an object that specifies presentational information about how the object data is to be transmitted. No
x-goog-acl The predefined ACL that you want to apply to the object. Do not use if you are using the acl query string parameter to apply ACLs. No
x-goog-custom-time A user-specified date and time. No
x-goog-metadata-directive The instructions for handling metadata during a copy operation. Can be COPY or REPLACE. The default value is COPY. No
x-goog-meta- An extension header that can be used to store additional metadata that is not provided by the other fields. No
x-goog-copy-source The bucket/object path to the object you want to copy. For example, /travel-maps/paris.jpg. Yes
x-goog-copy-source-generation The generation number of the object you want to copy. No
x-goog-copy-source-if-match An ETag. If the ETag you specify matches the ETag of the source object, then the source object is copied. No
x-goog-copy-source-if-none-match An ETag. If the ETag you specify does not match the Etag of the source object, then the object is copied. No
x-goog-copy-source-if-modified-since A date and time. If the date and time you specify is earlier than the Last-Modified date of the source object, then the object is copied. No
x-goog-copy-source-if-unmodified-since A date and time. If the date and time you specify is later than the Last-Modified date of the source object, then the object is copied. No
x-goog-encryption-kms-key-name The customer-managed encryption key to use to encrypt the copied object. No

To copy an object encrypted by a customer-supplied encryption key, use the headers listed on the Encryption page in your request.

Request body elements

This request does not include an XML document in the request body.

Request syntax

The following syntax applies to PUT Object requests that use the x-goog- copy-source request header and the related conditional copy request headers.

Date: DATE
Content-Type: MIME_TYPE
x-goog-copy-source: /BUCKET_NAME/OBJECT_NAME
x-goog-copy-source-if-match: ETAG
x-goog-copy-source-if-none-match: ETAG
x-goog-copy-source-if-unmodified-since: DATE
x-goog-copy-source-if-modified-since: DATE
x-goog-metadata-directive: COPY | REPLACE

Response headers

The request can return a variety of response headers depending on the request headers you use.

Response body elements

The following response elements are returned when you use the x-goog-copy- source request header or any of the related conditional copy request headers.

Element Description
CopyObjectResult Container for copy information.
ETag The ETag of the newly-copied object.
LastModified The date and time that the source object was last modified prior to the current copy operation.


The following sample uses the x-goog-copy-source request header to copy an object named paris.jpg from a bucket named travel-maps to a bucket named city-maps.


PUT /paris.jpg HTTP/1.1
Date: Fri, 23 Jul 2010 21:27:36 GMT
Content-Length: 0
x-goog-copy-source: travel-maps/paris.jpg
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg


HTTP/1.1 200 OK
ETag: "9930c6204b2f14e1a4496569dc200186"
Date: Fri, 23 Jul 2010 21:27:37 GMT
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate
Content-Length: 175
Content-Type: text/html

<?xml version='1.0' encoding='UTF-8'?>