API REST do Storage S3

ListObjects

Essa operação retorna alguns ou todos os objetos em um bucket, até 1.000.

Exemplo de solicitação:

GET /{fully_qualified_bucket_name} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
    x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
    x-amz-request-id: B34E94CACB2CEF6D
    Date: Mon, 17 Oct 2022 22:47:09 GMT
    <ListBucketResult>
        <Name>{fully_qualified_bucket_name}</Name>
        <Prefix></Prefix>
        <Marker></Marker>
        <Contents>
                <Key>example-object.jpg</Key>
                <LastModified>2022-10-17T01:56:20.000Z</LastModified>
                <ETag>"bf1d937a4d46a19f3basdfeg5cc8b902"</ETag>
                <Size>32347</Size>
                <Owner>
                <ID>canonical-user-id</ID>
                <DisplayName>example-display-name</DisplayName>
                </Owner>
                <StorageClass>STANDARD</StorageClass>
        </Contents>
  </ListBucketResult>

ListObjectsV2

Essa operação retorna alguns ou todos os objetos em um bucket, até 1.000.

Exemplo de solicitação:

GET /{fully_qualified_bucket_name}?list-type=2 HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
    x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
    x-amz-request-id: B34E94CACB2CEF6D
    Date: Mon, 17 Oct 2022 22:47:09 GMT
    <ListBucketResult>
        <Name>{fully_qualified_bucket_name}</Name>
        <Prefix></Prefix>
        <Marker></Marker>
        <Contents>
                <Key>example-object.jpg</Key>
                <LastModified>2022-10-17T01:56:20.000Z</LastModified>
                <ETag>"bf1d937a4d46a19f3basdfeg5cc8b902"</ETag>
                <Size>32347</Size>
                <Owner>
                <ID>canonical-user-id</ID>
                <DisplayName>example-display-name</DisplayName>
                </Owner>
                <StorageClass>STANDARD</StorageClass>
        </Contents>
  </ListBucketResult>

GetObject (versionId opcional)

Essa operação recupera um objeto de um bucket com um ID de versão opcional fornecido.

Exemplo de solicitação:

GET /{fully_qualified_bucket_name}/{object_name}?versionId={object_version_id} HTTP/1.1
Host: host
Content-MD5: request header
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6D
Date: Mon, 17 Oct 2022 22:47:09 GMT
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Content-Length: 13432
[13432 bytes of object data]

GetObjectAcl (versionId opcional)

Essa operação retorna uma resposta positiva e o ID, o DisplayName e a permissão do proprietário do objeto, indicando que ele tem acesso total ao objeto. As credenciais de acesso da conta precisam ser fornecidas para essa operação.

Exemplo de solicitação:

GET /{fully_qualified_bucket_name}/{object_name}?acl&versionId={VersionId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6D
Date: Mon, 17 Oct 2022 22:47:09 GMT
Content-Length: 157
<AccessControlPolicy>
    <Owner>
        <ID>canonical-user-id</ID>
        <DisplayName>example-display-name</DisplayName>
    </Owner>
    <AccessControlList>
        <Grant>
            <Grantee>
        <ID>canonical-user-id</ID>
                <DisplayName>example-display-name</DisplayName>
                <Type>CanonicalUser</Type>
            </Grantee>
            <Permission>FULL_CONTROL</Permission>
        </Grant>
</AccessControlList>
</AccessControlPolicy>

GetObjectRetention (versionId opcional)

Essa operação recupera o modo de retenção do objeto especificado e a data em que a retenção do Object Lock expira. O bucket precisa ter uma configuração de bloqueio de objeto.

Exemplo de solicitação:

GET /{fully_qualified_bucket_name}/{object_name}?retention&versionId={VersionId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
X-amz-expected-bucket-owner: ExpectedBucketOwner (optional)

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6D
Date: Mon, 17 Oct 2022 22:47:09 GMT
<Retention>
    <Mode>COMPLIANCE</Mode>
    <Timestamp>2022-10-17T01:56:20.000Z</Timestamp>
</Retention>

GetObjectLegalHold (versionId opcional)

Essa operação recebe o status de retenção judicial mais recente de um objeto. O bucket precisa ter uma configuração de bloqueio de objeto.

Exemplo de solicitação:

GET /{fully_qualified_bucket_name}/{object_name}?legal-hold&versionId={VersionId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
X-amz-expected-bucket-owner: ExpectedBucketOwner (optional)

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6D
Date: Mon, 17 Oct 2022 22:47:09 GMT
<LegalHold>
    <Status>ON</Status>
</LegalHold>

GetObjectTagging (versionId opcional)

Essa operação usa o subrecurso de inclusão de tags para retornar todas as tags de um objeto. Se o parâmetro versionId não for especificado, a operação vai retornar todas as tags da versão mais recente do objeto em um bucket com controle de versões. Se a versão atual do objeto for um marcador de exclusão, um status MethodNotAllowed será retornado com o cabeçalho de resposta x-amz-deletemarker definido como true.

Exemplo de solicitação:

GET /{fully_qualified_bucket_name}/{object_name}?tagging&versionId={VersionId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
X-amz-expected-bucket-owner: ExpectedBucketOwner (optional)

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
Date: Mon, 17 Oct 2022 22:47:09 GMT
<Tagging>
  <TagSet>
        <Tag>
        <Key>tag1</Key>
        <Value>val1</Value>
      </Tag>
      <Tag>
        <Key>tag2</Key>
        <Value>val2</Value>
      </Tag>
  </TagSet>
</Tagging>

PutObject

Essa operação adiciona um objeto a um bucket. Você precisa ter as permissões de GRAVAÇÃO corretas em um bucket para adicionar um objeto a ele.

Criptografia versão 2

Para um bucket EV2 (Encryption Version 2), a solicitação usará uma chave AEAD padrão para criptografia se nenhuma chave personalizada for especificada.

Para usar uma chave AEAD personalizada na criptografia, é necessário definir dois cabeçalhos:

  • x-amz-server-side-encryption: SSE-KMS: indica que esta solicitação está tentando usar uma chave AEAD personalizada.
  • x-amz-server-side-encryption-aws-kms-key-id: {custom_key_namespace}/{custom_key_name}: especifica a chave destinada ao uso. O namespace da chave precisa estar no mesmo projeto que o bucket.

Exemplo de solicitação:

PUT /{fully_qualified_bucket_name}/{object_name} HTTP/1.1
Host: host
Content-MD5: request header
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-Length: 5233
Content-type: text/plain
[5233 bytes of object data]

Exemplo de resposta (sucesso):

HTTP/1.1 100 Continue

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6C
Date: Mon, 17 Oct 2022 22:47:09 GMT
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

PutObjectTagging

Essa operação usa o subrecurso de inclusão de tags para adicionar um conjunto de tags a um objeto existente.

Exemplo de solicitação:

PUT /{fully_qualified_bucket_name}/{object_name}?tagging HTTP/1.1
Host: host
Content-MD5: +b9TrAB9F8ne7rJpPkqavQ==
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-Length: {length}
Content-type: text/plain
<Tagging>
    <TagSet>
        <Tag>
            <key>my-tag-key</key>
            <value>my-tag-value</value>
        </Tag>
    </TagSet>
</Tagging>

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6C
Date: Mon, 17 Oct 2022 22:47:09 GMT

DeleteObject (versionId opcional)

Essa operação permite excluir vários objetos de um único bucket com uma solicitação. A solicitação pode conter uma lista de até 1.000 chaves que você quer excluir.

Exemplo de solicitação:

DELETE /{fully_qualified_bucket_name}/{object_name}?versionId={VersionId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-type: text/plain
<Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
   <Object>
      <Key>object_one.jpg</Key>
      <VersionId>1234568892</VersionId>
   </Object>
   <Object>
      <Key>object_two.jpg</Key>
   </Object>
</Delete>

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: 5h4FxSNCUS7wP5z92eGCWDshNpMnRuXvETa4HH3LvvH6VAIr0jU7tH9kM7X+njXx
x-amz-request-id: A437B3B641629AEE
Date: Fri, 02 Oct 2023 01:53:42 GMT
Content-Type: application/xml
Content-Length: 251
<?xml version="1.0" encoding="UTF-8"?>
<DeleteResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Deleted>
        <Key>object_one.jpg</Key>
    </Deleted>
    <Error>
        <Key>object_two.jpg</Key>
        <Code>AccessDenied</Code>
        <Message>Access Denied</Message>
    </Error>
</DeleteResult>

DeleteObjects (versionId opcional)

Remove um objeto de um bucket. O comportamento depende do estado de controle de versões do bucket: - Se o controle de versões do bucket não estiver ativado, a operação vai excluir o objeto permanentemente. - Se o controle de versões do bucket estiver ativado, a operação vai inserir um marcador de exclusão, que se torna a versão atual do objeto. Para excluir permanentemente um objeto em um bucket com controle de versão, inclua o versionId do objeto na solicitação.

Exemplo de solicitação:

DELETE /{fully_qualified_bucket_name}/{object_name}?versionId={VersionId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-type: text/plain

Exemplo de resposta (sucesso):

HTTP/1.1 204 NoContent
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6C
Date: Mon, 17 Oct 2022 22:47:09 GMT

DeleteObjectTagging (versionId opcional)

Essa operação usa o subrecurso de inclusão de tags para remover todas as tags de um objeto.

Exemplo de solicitação:

DELETE /{fully_qualified_bucket_name}/{object_name}?tagging&versionId={VersionId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-type: text/plain

Exemplo de resposta (sucesso):

HTTP/1.1 204 NoContent
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6C
Date: Mon, 17 Oct 2022 22:47:09 GMT

HeadObject (versionId opcional)

A operação HEAD recupera metadados de um objeto sem retornar o objeto em si. Essa operação é útil se você tiver interesse apenas nos metadados de um objeto.

Exemplo de solicitação:

HEAD /{fully_qualified_bucket_name}/{object_name}?versionId={VersionId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-type: text/plain

Exemplo de resposta (sucesso):

HTTP/1.1 200
x-amz-id-2: ef8yU9AS1ed4OpIszj7UDNEHGran
x-amz-request-id: 318BC8BC143432E5
x-amz-version-id: 3HL4kqtJlcpXroDTDmjVBH40Nrjfkd
Date: Wed, 28 Oct 2023 22:32:00 GMT
Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT
ETag: "fba9dede5f27731c9771645a39863328"
Content-Length: 434234
Content-Type: text/plain
Connection: close

CreateMultipartUpload

Essa ação inicia um upload em várias partes e retorna um ID de upload.

Com um upload de várias partes, é possível adicionar um único objeto como um conjunto de partes. Cada parte é uma porção contígua dos dados do objeto. Faça upload dessas partes do objeto de forma independente e em qualquer ordem.

O ID de upload retornado é usado para associar todas as partes no upload em várias partes específico. Você especifica esse ID em cada uma das solicitações de parte de upload subsequentes. Você também usa esse ID de upload na solicitação final para concluir ou cancelar a solicitação de upload de várias partes.

Criptografia versão 2

O ID de upload retornado para um bucket EV2(versão 2 da criptografia) será gerado apenas uma vez. Se o ID de upload retornado dessa operação for perdido, não será possível recuperá-lo com ListMultipartUploads. No entanto, os IDs de upload retornados por ListMultipartUploads podem ser usados para AbortMultipartUpload ou ListParts. Somente o ID retornado de "CreateMultipartUpload" pode ser usado para "UploadPart" ou "CompleteMultipartUpload".

Exemplo de solicitação:

POST /{fully_qualified_bucket_name}/{object_name}?uploads HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-type: text/plain

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6D
Date: Mon, 17 Oct 2022 22:47:09 GMT
    <InitiateMultipartUploadResult>
        <Bucket>{fully_qualified_bucket_name}</Bucket>
        <Key>{object_name}</Key>
        <UploadId>VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA</UploadId>
  </InitiateMultipartUploadResult>

ListMultipartUploads (max-uploads opcional)

Essa operação lista os uploads de várias partes em andamento para um bucket.

Criptografia versão 2

Os IDs de upload retornados dessa operação funcionam com ListParts e AbortMultipartUpload.

Exemplo de solicitação:

GET /{fully_qualified_bucket_name}?uploads&max-uploads={max-uploads} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-type: text/plain

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6D
Date: Mon, 17 Oct 2022 22:47:09 GMT
<ListMultipartUploadsResult>
<Bucket>{fully_qualified_bucket_name}</Bucket>
<KeyMarker></KeyMarker>
<UploadIdMarker></UploadIdMarker>
<NextKeyMarker>my-movie.m2ts</NextKeyMarker>
    <NextUploadIdMarker>YW55IGlkZWEgd2h5IGVsdmluZydzIHVwbG9hZCBmYWlsZWQ</NextUploadIdMarker>
    <MaxUploads>3</MaxUploads>
    <IsTruncated>true</IsTruncated>
    <Upload>
            <Key>{object_name}</Key>
            <UploadId>VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA</UploadId>
            <Initiator>
            <ID>{canonical-user-id}</ID>
            <DisplayName>InitiatorDisplayName</DisplayName>
            </Initiator>
            <Owner>
            <ID>{canonical-owner-user-id}</ID>
            <DisplayName>OwnerDisplayName</DisplayName>
            </Owner>
            <StorageClass>STANDARD</StorageClass>
            <Initiated>2022-10-17T01:56:20.000Z</Initiated>
    </Upload>
</ListMultipartUploadsResult>

ListParts (max-parts opcional)

Essa operação lista as partes enviadas para um upload de várias partes específico e retorna um máximo padrão de 1.000 partes enviadas. Você precisa incluir o ID do upload, que é obtido com a solicitação CreateMultipartUpload.

Criptografia versão 2

O ID de upload retornado de CreateMultipartUpload ou ListMultipartUploads pode ser usado para essa solicitação.

Exemplo de solicitação:

GET /{fully_qualified_bucket_name}/{object_name}?uploadId={uploadId}&max-parts={max-parts} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-type: text/plain

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6D
Date: Mon, 17 Oct 2022 22:47:09 GMT
<ListPartsResult>
        <Bucket>{fully_qualified_bucket_name}</Bucket>
        <Key>{object_name}</Key>
        <UploadId>{uploadId}</UploadId>
        <Initiator>
            <ID>{canonical-user-id}</ID>
            <DisplayName>InitiatorDisplayName</DisplayName>
          </Initiator>
        <Owner>
                <ID>{canonical-owner-id}</ID>
                <DisplayName>OwnerDisplayName</DisplayName>
        </Owner>
        <StorageClass>STANDARD</StorageClass>
        <PartNumberMarker></PartNumberMarker>
        <NextPartNumberMarker></NextPartNumberMarker>
        <MaxParts>{max-parts}</MaxParts>
        <IsTruncated>true</IsTruncated>
        <Part>
                <PartNumber>2</PartNumber>
                <LastModified>2022-10-17T01:56:20.000Z</LastModified>
                <ETag>"7778aef8t866abc1fa1e8466f296d394"</ETag>
                <Size>10485769</Size>
        </Part>
        <Part>
                <PartNumber>3</PartNumber>
                <LastModified>2022-10-17T01:56:20.000Z</LastModified>
                <ETag>"aaab18db4cc2f85cedef854fccci24x8"</ETag>
                <Size>10423760</Size>
        </Part>
</ListPartsResult>

UploadPart

Essa operação faz upload de uma parte em um upload de várias partes para um objeto.

Criptografia versão 2

Para um bucket EV2 (Encryption Version 2), é obrigatório usar o ID retornado de CreateMultipartUpload. Os IDs retornados de "ListMutlipartUploads" não funcionam para essa solicitação.

Exemplo de solicitação:

PUT /{fully_qualified_bucket_name}/{object_name}?uploadId={uploadId}&partNumber={partNumber} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-Length: 345442
Content-MD5: +b9TrAB9F8ne7rJpPkqavQ==
[part data omitted, 345442 bytes of part data]

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6D
Date: Mon, 17 Oct 2022 22:47:09 GMT
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

AbortMultipartUpload

Essa ação cancela um upload de várias partes e torna o ID de upload inválido para o envio de outras partes. O armazenamento consumido por partes enviadas anteriormente é liberado.

Criptografia versão 2

Para um bucket EV2 (Encryption Version 2), use o ID retornado de CreateMultipartUpload ou ListMultipartUploads para essa operação.

Exemplo de solicitação:

DELETE /{fully_qualified_bucket_name}/{object_name}?uploadId={uploadId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-type: text/plain

Exemplo de resposta (sucesso):

HTTP/1.1 204 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6C
Date: Mon, 17 Oct 2022 22:47:09 GMT

CompleteMultipartUpload

Essa operação conclui um upload de várias partes de um objeto montando as partes enviadas anteriormente.

Criptografia versão 2

Para um bucket EV2 (Encryption Version 2), é obrigatório usar o ID retornado de CreateMultipartUpload. Os IDs retornados de ListMutlipartUploads NÃO funcionam para esta solicitação.

Para usar uma chave AEAD personalizada na criptografia, é necessário definir dois cabeçalhos:

  • x-amz-server-side-encryption: SSE-KMS: indica que esta solicitação está tentando usar uma chave AEAD personalizada.
  • x-amz-server-side-encryption-aws-kms-key-id: {custom_key_namespace}/{custom_key_name}: especifica a chave destinada ao uso. O namespace da chave precisa estar no mesmo projeto que o bucket.

Exemplo de solicitação:

POST /{fully_qualified_bucket_name}/{object_name}?uploadId={uploadId} HTTP/1.1
Host: host
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string
Content-Length: 391
Content-type: text/plain
<CompleteMultipartUpload>
<Part>
    <PartNumber>1</PartNumber>
    <ETag>"a54357aff0632cce46d942af68356b38"</ETag>
</Part>
<Part>
    <PartNumber>2</PartNumber>
    <ETag>"0c78aef83f66abc1fa1e8477f296d394"</ETag>
</Part>
<Part>
      <PartNumber>3</PartNumber>
      <ETag>"acbd18db4cc2f85cedef654fccc4a4d8"</ETag>
</Part>
</CompleteMultipartUpload>

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6D
Date: Mon, 17 Oct 2022 22:47:09 GMT
<CompleteMultipartUploadResult>
<Location>http://{host}/{fully_qualified_bucket_name}/{object_name}</Location>
        <Bucket>{fully_qualified_bucket_name}</Bucket>
        <Key>{object_name}</Key>
        <ETag>"acbd18db4cc2f85cedef654fccc4a4d8"</ETag>
</CompleteMultipartUploadResult>

CopyObject

Essa operação é um tipo especial de PutObject em que os dados são extraídos de um objeto de origem já presente no armazenamento de objetos.

O bucket de origem e a chave do objeto são especificados como o valor do cabeçalho x-amz-copy-source, separados por um /. Por exemplo, para copiar o objeto images/my_image.jpg do bucket my_bucket, o valor a ser definido é my_bucket/images/my_image.jpg.

Criptografia versão 2

Para um bucket EV2 (versão 2 da criptografia), o objeto de origem precisa ser de um bucket da versão 2 da criptografia. Caso contrário, a operação vai falhar.

Para usar uma chave AEAD personalizada na criptografia, é necessário definir dois cabeçalhos:

  • x-amz-server-side-encryption: SSE-KMS: indica que esta solicitação está tentando usar uma chave AEAD personalizada.
  • x-amz-server-side-encryption-aws-kms-key-id: {custom_key_namespace}/{custom_key_name}: especifica a chave destinada ao uso. O namespace da chave precisa estar no mesmo projeto que o bucket.

Exemplo de solicitação:

PUT /{fully_qualified_bucket_name}/{object_name} HTTP/1.1
Host: host
X-Amz-Copy-Source: my_bucket/images/my_image.jpg
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6C
x-amz-copy-source-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo
Date: Mon, 17 Oct 2022 22:47:09 GMT

<CopyObjectResult>
    <LastModified>2009-10-12T17:50:30.000Z</LastModified>
    <ETag>"9b2cf535f27731c974343645a3985328"</ETag>
</CopyObjectResult>

UploadPartCopy

Essa operação usa um objeto já presente no armazenamento de objetos como os dados de uma única parte em um upload em várias partes.

O bucket de origem e a chave do objeto são especificados como o valor do cabeçalho x-amz-copy-source, separados por um /. Por exemplo, para copiar o objeto images/my_image.jpg do bucket my_bucket, o valor a ser definido é my_bucket/images/my_image.jpg.

Criptografia versão 2

Essa operação não é compatível com buckets EV2 (versão 2 de criptografia).

Exemplo de solicitação:

PUT /{fully_qualified_bucket_name}/{object_name}?uploadId={uploadId}&partNumber={partNumber} HTTP/1.1
Host: host
X-Amz-Copy-Source: my_bucket/images/my_image.jpg
X-Amz-Date: date
X-Amz-Content-SHA256: authorization string

Exemplo de resposta (sucesso):

HTTP/1.1 200 OK
x-amz-id-2: iVmcB7OXXJRkRH1FiVq1151/T24gRfpwpuZrEG11Bb9ImOMAAe98oxSpXlknabA0LTvBYJpSIX
x-amz-request-id: B34E94CACB2CEF6C
x-amz-copy-source-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo
Date: Mon, 17 Oct 2022 22:47:09 GMT

<CopyPartResult>
   <ETag>string</ETag>
   <LastModified>timestamp</LastModified>
   <ChecksumCRC32>string</ChecksumCRC32>
   <ChecksumCRC32C>string</ChecksumCRC32C>
   <ChecksumSHA1>string</ChecksumSHA1>
   <ChecksumSHA256>string</ChecksumSHA256>
</CopyPartResult>