[Документация Yandex Cloud](../../../../index.md) > [Yandex Object Storage](../../../index.md) > Справочник API > [AWS S3 REST](../../index.md) > [REST](../index.md) > Object > CopyObject

# Object Storage API, REST совместимый с Amazon S3: CopyObject

Создает копию объекта, хранящегося в Object Storage. Объекты, размером до 5 ГБ можно скопировать одной операцией `copy`, если объект больше, чем 5 ГБ, то необходимо применять операцию [copyPart](../multipart/copypart.md).

Чтобы указать источник для копирования, используйте заголовок `X-Amz-Copy-Source`. Запрос на копирование не должен передавать каких-либо данных, кроме заголовков.

{% note info %}

Object Storage не блокирует объект на запись и может одновременно принять несколько запросов, копирующих объекты в один и тот же результирующий объект. После завершения всех запросов результирующим объектом окажется тот, чья операция копирования запустилась последней.

{% endnote %}

Метаданные объекта копируются вместе с объектом. При необходимости их можно изменить, задав в явном виде соответствующие заголовки.

Также с помощью заголовков можно:

- Изменить класс хранилища объекта.
- Добавить условия для копирования объекта.
- Установить [блокировку](../../../concepts/object-lock.md) на объект (если бакет [версионируемый](../../../concepts/versioning.md) и механизм блокировок включен).

Пользователь должен иметь разрешение на чтение исходного объекта и разрешение на запись в результирующий бакет.

Подробнее о подготовке к работе с API и общем виде запроса в разделе [Как пользоваться S3 API](../../index.md).

## Запрос {#request}

```http
PUT /{bucket}/{key} HTTP/2
```

### Path параметры {#path-parameters}

Параметр | Описание
----- | -----
`bucket` | Имя результирующего бакета.
`key` | Ключ результирующего объекта. Идентификатор, под которым объект сохраняется в Object Storage.


### Заголовки {#request-headers}

Обязательные заголовки перечислены в таблице ниже.

Заголовок | Описание
----- | -----
`X-Amz-Copy-Source` | Имя бакета и ключ объекта, который будет копироваться, разделенные символом `/`.<br/><br/>Например, `X-Amz-Copy-Source: /source_bucket/sourceObject`.<br/><br/>Если в бакете включено [версионирование](../../../concepts/versioning.md), то вы можете скопировать определенную версию объекта. Для этого укажите в заголовке идентификатор версии объекта — добавьте `?versionId=<version-id>` к значению заголовка, например: `/mybucket/image.png?versionId=0005E4A66AD990A4`. Если не указывать идентификатор версии, то будет скопирована последняя версия объекта.

Также используйте необходимые [общие заголовки](../common-request-headers.md).

Заголовки, описанные в таблице ниже используйте, если вам необходимо изменить поведение метода `copy` по умолчанию.


Заголовок | Описание
----- | -----
`X-Amz-Metadata-Directive` | Режим копирования метаданных.<br/><br/>Если значение заголовка `COPY`, то метаданные объекта копируются, а все заголовки `X-Amz-Meta-*` игнорируются. Это поведение метода `copy` по умолчанию.<br/><br/>Если значение заголовка `REPLACE`, то метаданные объекта подменяются указанными в запросе.<br/><br/>Заголовок `X-Amz-Storage-Class` не копируется, добавьте его в запрос, если это необходимо.
`X-Amz-Copy-Source-If-Match` | Условие для копирования объекта.<br/><br/>Если `ETag` объекта равен заданному в заголовке, то объект копируется.<br/><br/>Если условие не выполнено, то Object Storage вернет ошибку 412.<br/><br/>Можно использовать вместе с заголовком `X-Amz-Copy-Source-If-Unmodified-Since`.
`X-Amz-Copy-Source-If-None-Match` | Условие для копирования объекта.<br/><br/>Если `ETag` объекта не равен заданному в заголовке, то объект копируется.<br/><br/>Если условие не выполнено, то Object Storage вернет ошибку 412.<br/><br/>Можно использовать вместе с заголовком `X-Amz-Copy-Source-If-Modified-Since`.
`X-Amz-Copy-Source-If-Unmodified-Since` | Условие для копирования объекта.<br/><br/>Объект копируется, если он не изменялся с указанного времени.<br/><br/>Если условие не выполнено, то Object Storage вернет ошибку 412.<br/><br/>Можно использовать вместе с заголовком `X-Amz-Copy-Source-If-Match`.
`X-Amz-Copy-Source-If-Modified-Since` | Условие для копирования объекта.<br/><br/>Объект копируется, если он изменился с указанного времени.<br/><br/>Если условие не выполнено, то Object Storage вернет ошибку 412.<br/><br/>Можно использовать вместе с заголовком `X-Amz-Copy-Source-If-None-Match`.
`X-Amz-Server-Side-Encryption` | Алгоритм шифрования, используемый по умолчанию для шифрования новых объектов.
`X-Amz-Server-Side-Encryption-Aws-Kms-Key-Id` | Идентификатор [ключа KMS](../../../../kms/concepts/key.md), используемый по умолчанию для шифрования новых объектов.
`X-Amz-Storage-Class` | [Класс хранилища](../../../concepts/storage-class.md) объекта.<br/><br/>Может иметь любое из значений:<ul><li>`STANDARD` — стандартное хранилище.</li><li>`COLD`, `STANDARD_IA` или `NEARLINE` — холодное хранилище.</li><li>`ICE` или `GLACIER` — ледяное хранилище.</li></ul>Если заголовок не указан, то объект сохраняется в хранилище, установленном в настройках бакета.
`X-Amz-Object-Lock-Mode` | <p>Тип временной [блокировки](../../../concepts/object-lock.md), устанавливаемой на объект (если бакет [версионируемый](../../../concepts/versioning.md) и в нем включен механизм блокировок):</p><ul><li>`GOVERNANCE` — временная управляемая блокировка.</li><li>`COMPLIANCE` — временная строгая блокировка.</li></ul><p>Вы можете установить на версию объекта только временную блокировку (заголовки `X-Amz-Object-Lock-Mode` и `X-Amz-Object-Lock-Retain-Until-Date`), только бессрочную блокировку (`X-Amz-Object-Lock-Legal-Hold`) или обе сразу. Подробнее об их совместной работе в разделе [Типы блокировок](../../../concepts/object-lock.md#types).</p>
`X-Amz-Object-Lock-Retain-Until-Date` | Дата и время окончания временной блокировки в любом из форматов, описанных в [стандарте HTTP](https://www.rfc-editor.org/rfc/rfc9110#name-date-time-formats). Например, `Mon, 12 Dec 2022 09:00:00 GMT`. Указывается только вместе с заголовком `X-Amz-Object-Lock-Mode`.
`X-Amz-Object-Lock-Legal-Hold` | <p>Статус бессрочной [блокировки](../../../concepts/object-lock.md), устанавливаемой на объект (если бакет [версионируемый](../../../concepts/versioning.md) и в нем включен механизм блокировок):</p><ul><li>`ON` — блокировка установлена.</li><li>`OFF` — блокировка не установлена.</li></ul><p>Вы можете установить на версию объекта только временную блокировку (заголовки `X-Amz-Object-Lock-Mode` и `X-Amz-Object-Lock-Retain-Until-Date`), только бессрочную блокировку (`X-Amz-Object-Lock-Legal-Hold`) или обе сразу. Подробнее об их совместной работе в разделе [Типы блокировок](../../../concepts/object-lock.md#types).</p>
`X-Amz-Meta-*` | Пользовательские метаданные объекта.<br/><br/>Все заголовки, начинающиеся с `X-Amz-Meta-`, Object Storage преобразует по правилу: `X-Amz-Meta-foo-bar_baz` → `X-Amz-Meta-Foo-Bar_baz`.<br/><br/>Общий размер пользовательских заголовков не должен превышать 2KB. Размер пользовательских данных определяется как длина строки в кодировке UTF-8. В размере учитываются и названия заголовков и их значения.<br/><br/>Если `X-Amz-Metadata-Directive: COPY`, то эти заголовки игнорируются.



## Ответ {#response}

### Заголовки {#response-headers}

Ответ может содержать [общие заголовки](../common-response-headers.md), а также заголовки, перечисленные в таблице ниже.

Заголовок | Описание
----- | -----
`X-Amz-Storage-Class` | [Класс хранилища](../../../concepts/storage-class.md) объекта.<br/><br/>Может иметь значения:<ul><li>`STANDARD` — стандартное хранилище.</li><li>`COLD` — холодное хранилище.</li><li>`ICE` — ледяное хранилище.</li></ul>

### Коды ответов {#response-codes}

Перечень возможных ответов смотрите в разделе [Ответы](../response-codes.md).

### Схема данных {#response-scheme}

```xml
<CopyObjectResult>
   <LastModified>2019-02-15T14:32:00</LastModified>
   <ETag>"9bgh7535f2734ec974343yuc93985328"</ETag>
</CopyObjectResult>
```

Элемент | Описание
----- | -----
`CopyObjectResult` | Содержит элементы ответа.<br/><br/>Путь: `/CopyObjectResult`.
`ETag` | `ETag` результирующего объекта. Поскольку при вычислении `ETag` не учитываются метаданные, то `ETag` исходного и результирующего объекта должны быть равны.<br/><br/>Путь: `/CopyObjectResult/ETag`.
`LastModified` | Дата последнего изменения объекта.<br/><br/>Путь: `/CopyObjectResult/LastModified`.

#### Связанные статьи {#related-articles}

* [Объект](../../../concepts/object.md)

* [Копирование объектов](../../../operations/objects/copy.md)

#### Полезные ссылки {#see-also}

* [Начало работы с AWS S3 API в Yandex Object Storage](../../s3-api-quickstart.md)

* [Отладка запросов с помощью утилиты AWS CLI](../../signing-requests.md#debugging)

* [Пример отправки подписанного запроса с помощью утилиты curl](../../../api-ref/authentication.md#s3-api-example)

* [Пример кода для генерации подписи](../../../concepts/pre-signed-urls.md#code-examples)