> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Objetos

> Limites de objetos, classes de armazenamento e trabalho com objetos por meio da API da plataforma.

<a id="objects-and-their-limits" />

## Objetos e seus limites

Estes são os próprios números do S3, e eles são aplicados aos valores do S3:

| Limite de tempo | Valor |
| - | - |
| Upload de solicitação única | 5 GiB |
| Tamanho da peça | Mínimo de 5 MiB, máximo de 5 GiB |
| Peças por upload | 10,000 |

<Warning>
  O limite de upload único é verificado em relação ao tamanho que você **declara**, antes que qualquer carga seja lida. Um `Content-Length` de tamanho grande é recusado com `EntityTooLarge` (`413` na API de armazenamento) sem transferir um byte — e um corpo que passa pelo limite também é cortado.
</Warning>

O limite de 5 MiB aplica-se a todas as partes, exceto a última nomeada na conclusão, e é verificado **na conclusão**, não quando a parte é carregada. Uma lista de partes cuja parte não final é curta falha com `EntityTooSmall` depois que os bytes já estão em estágio.

Os uploads que você inicia e nunca termina mantêm suas partes em estágio até que algo as remova. `abort_incomplete_multipart_upload` [regra do ciclo de vida](/pt/storage/lifecycle#lifecycle-rules) ao invés de confiar em lembrar.

<a id="declare-the-upload-length" />

## Declare o comprimento do upload

Os uploads de objetos e uploads de peças multiparte devem prometer o comprimento da carga útil. Envie `Content-Length` na API de armazenamento e em uploads S3 comuns. Os uploads vazios permanecem suportados com comprimento `0`; cópias do lado do servidor não precisam de um comprimento de corpo de upload.

Para modos de streaming S3 `aws-chunked` suportados, envie `X-Amz-Decoded-Content-Length`: ele conta bytes de carga útil, excluindo enquadramento e trailers. O comprimento de fio codificado não pode substituí-lo. A adição desse cabeçalho a uma solicitação em pedaços não faz com que essa solicitação seja um upload de streaming da AWS.

Os uploads sem um comprimento de carga declarado recebem HTTP `411` antes do armazenamento: `MISSING_CONTENT_LENGTH` na API de armazenamento ou `MissingContentLength` no S3. Um corpo que termina abaixo do seu comprimento declarado é rejeitado; uma parte rejeitada retenta deixar a parte previamente armazenada intacta.

Se você produzir um pipe, gerador ou arquivo de tamanho desconhecido, armazene-o em um arquivo e envie seu comprimento medido. Para streams maiores, armazene cada parte multiparte e declare o comprimento dessa parte. Você não precisa do comprimento completo do objeto com antecedência. Tenha em mente os limites de tamanho de várias partes acima.

O Go SDK determina o comprimento restante de corpos pesquisáveis, incluindo arquivos, a partir da v0.3.2. Um leitor arbitrário ainda precisa de um comprimento conhecido ou buffering. Uma ETag sozinha não pode dizer se um produtor entregou todos os bytes que pretendia enviar.

<a id="storage-classes" />

## Classes de armazenamento

Duas classes, e elas nomeiam camadas de dispositivos em vez de padrões de acesso:

| Classe | Apoiado por | Use para |
| - | - | - |
| `STANDARD` | Solid-state pool. O padrão. | Qualquer coisa servida ou lida regularmente. |
| `COLD` | Pool de disco giratório. | Arquivos, backups, qualquer coisa que raramente lê. |

Eles mantêm a ortografia maiúscula do S3 porque o vocabulário é do S3. Defina uma classe por objeto com `x-amz-storage-class` no upload, ou mova objetos entre classes com uma transição de ciclo de vida. **As duas classes cobram separadamente**, então o rótulo que um objeto carrega decide em qual contador e qual preço seus bytes aterrissarão.

Uma classe não suportada - `STANDARD_IA`, `GLACIER`, qualquer outra coisa que o S3 defina - é rejeitada em vez de armazenada silenciosamente como `STANDARD`.

<a id="working-with-objects-through-the-storage-api" />

## Trabalhando com objetos através da API de armazenamento

Você não precisa de um cliente do S3. A API de armazenamento expõe o mesmo plano de objeto em `/v1/buckets/{bucket}/objects`, autenticado com suas credenciais comuns do Basaltic exatamente como qualquer outra chamada para essa API — útil para um serviço que já as possui e não deve ter um SDK do S3 também:

<Tabs>
  <Tab title="Console">
    A guia **Objects** de um bucket é um navegador de arquivos nas mesmas rotas. **Upload** abre a página **Upload objects**, onde você define um **Folder
    prefix**, escolhe uma **Storage class** — **Standard** ou **Cold** — e adiciona **Files**. **New folder** cria um prefixo, e selecionar linhas dá **Delete selected**, que emite uma exclusão por chave ao invés de uma solicitação em massa — veja a nota abaixo.

    Abrir um objeto dá a você **Download** e **Delete**, uma aba **Versions**, e uma aba **Properties** carregando suas **Tags** ao lado dos [controles de retenção](/pt/storage/versioning#object-lock-and-retention).
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    PUT    /v1/buckets/{bucket}/objects/{key}     # body is the object bytes
    GET    /v1/buckets/{bucket}/objects/{key}     # Range requests honoured (206)
    DELETE /v1/buckets/{bucket}/objects/{key}     # ?versionId deletes one version
    GET    /v1/buckets/{bucket}/objects?prefix=&delimiter=&marker=&max_keys=
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic storage object put <bucket> <key> --file ./report.csv
    basaltic storage object get <bucket> <key> > report.csv
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    f, err := os.Open("report.csv")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()

    _, err = storage.New(cfg).PutObject(ctx, "my-app-assets", "reports/q1.csv", f)
    ```

    Stream de bytes de objeto: PutObject recebe um io.Reader e GetObject retorna um io.ReadCloser, portanto, nenhum deles precisa do objeto inteiro na memória.
  </Tab>
</Tabs>

Os sub-recursos por objeto são usados como parâmetros de consulta nessas rotas — `?tagging`, `?retention`, `?legal-hold` — e os mesmos cabeçalhos `X-Amz-*` se aplicam no upload para configurações de classe de armazenamento, criptografia e bloqueio de objeto. `delimiter` dá-lhe a semântica de pasta usual através de `common_prefixes`, e `max_keys` é limitado a 1000 por página.

<Note>
  Exclusão em massa (`POST ?delete`) e cópia do lado do servidor (`x-amz-copy-source`) são recursos de endpoint do S3. Por meio da API de armazenamento, exclua objetos um de cada vez.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.