> ## 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

> Límites de objetos, clases de almacenamiento y trabajo con objetos a través de la API de la plataforma.

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

## Objetos y sus límites

Estos son los propios números de S3, y se aplican a los valores de S3:

| Límite | Valor |
| - | - |
| Subida de solicitud única | 5 GiB |
| Tamaño de la pieza | 5 MiB mínimo, 5 GiB máximo |
| Piezas por carga | 10,000 |

<Warning>
  El límite de carga única se compara con el tamaño que **declara** antes de leer cualquier carga útil. Un `Content-Length` de gran tamaño se rechaza con `EntityTooLarge` (`413` en la API de almacenamiento) sin transferir un byte, y un cuerpo que se transmite más allá del límite también se corta.
</Warning>

El límite de 5 MiB se aplica a todas las partes excepto la última nombrada al completarse, y se comprueba **al completarse**, no cuando se carga la parte. Una lista de partes cuya parte no final es corta falla con `EntityTooSmall` después de que los bytes ya están en etapa.

Las subidas que comienzas y nunca terminas mantienen sus partes preparadas hasta que algo las elimina. `abort_incomplete_multipart_upload` [Regla del ciclo de vida](/es/storage/lifecycle#lifecycle-rules) en lugar de confiar en recordar.

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

## Declarar la longitud de la subida

Las cargas de objetos y las cargas de partes múltiples deben prometer su longitud de carga útil. Enviar `Content-Length` en la API de almacenamiento y en las cargas ordinarias de S3. Las cargas vacías siguen siendo compatibles con longitud `0`; las copias del lado del servidor no necesitan una longitud de cuerpo de carga.

Para los modos de transmisión S3 `aws-chunked` compatibles, envíe `X-Amz-Decoded-Content-Length`: cuenta los bytes de carga útil, excluyendo el encuadre y los tráilers. La longitud de cable codificada no puede reemplazarlo. Al agregar este encabezado a una solicitud fragmentada sin contenido, no se convierte en una carga de transmisión de AWS.

Las cargas sin una longitud de carga declarada reciben HTTP `411` antes del almacenamiento: `MISSING_CONTENT_LENGTH` en la API de almacenamiento, o `MissingContentLength` en S3. Un cuerpo que termina corto de su longitud declarada es rechazado; un reintento de parte rechazada deja intacta la parte previamente almacenada.

Si produce un tubo, generador o archivo de tamaño desconocido, guárdelo en un archivo y envíe su longitud medida. Para flujos más grandes, almacenar en búfer cada parte multiparte y declarar la longitud de esa parte. No necesitas saber la longitud completa del objeto por adelantado. Tenga en cuenta los límites de tamaño de varias partes anteriores.

El SDK de Go determina la longitud restante de los cuerpos buscables, incluidos los archivos, a partir de la versión 0.3.2. Un lector arbitrario todavía necesita una longitud conocida o búfer. Una ETag por sí sola no puede decir si un productor entregó todos los bytes que pretendía enviar.

<a id="storage-classes" />

## Clases de almacenamiento

Dos clases, y nombran niveles de dispositivos en lugar de patrones de acceso:

| Clase | Respaldado por | Uso para |
| - | - | - |
| `STANDARD` | Agrupación de estado sólido. El valor predeterminado. | Cualquier cosa servida o leída regularmente. |
| `COLD` | Agrupación de disco giratorio. | Archivos, copias de seguridad, cualquier cosa que se lee raramente. |

Mantienen la ortografía mayúscula de S3 porque el vocabulario es de S3. Establezca una clase por objeto con `x-amz-storage-class` en la carga, o mueva objetos entre clases con una transición de ciclo de vida. **Las dos clases facturan por separado**, por lo que la etiqueta que lleva un objeto decide en qué contador y a qué precio aterrizan sus bytes.

Una clase no soportada — `STANDARD_IA`, `GLACIER`, cualquier otra cosa que S3 defina — es rechazada en lugar de ser almacenada silenciosamente como `STANDARD`.

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

## Trabajar con objetos a través de la API de almacenamiento

No necesita un cliente de S3. La API de almacenamiento expone el mismo plano de objetos en `/v1/buckets/{bucket}/objects`, autenticado con tus credenciales de Basaltic ordinarias exactamente como cualquier otra llamada a esta API, útil para un servicio que ya las tiene y no debería llevar un SDK de S3 también:

<Tabs>
  <Tab title="Console">
    La pestaña **Objects** de un bucket es un explorador de archivos sobre las mismas rutas. **Upload** abre la página **Upload objects**, donde puedes establecer un **Folder
    prefix**, elegir una **Storage class** (**Standard** o **Cold**) y agregar **Files**. **New folder** crea un prefijo, y al seleccionar filas obtienes **Delete selected**, que emite una eliminación por clave en lugar de una solicitud masiva — ver la nota a continuación.

    Al abrir un objeto, se muestran **Download** y **Delete**, una pestaña **Versions** y una pestaña **Properties** con sus **Tags** junto con los [controles de retención](/es/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)
    ```

    Flujo de bytes de objeto: PutObject toma un io.Reader y GetObject devuelve un io.ReadCloser, por lo que ninguno necesita el objeto completo en memoria.
  </Tab>
</Tabs>

Los sub-recursos por objeto se utilizan como parámetros de consulta en estas rutas — `?tagging`, `?retention`, `?legal-hold` — y los mismos encabezados `X-Amz-*` se aplican en la carga para la clase de almacenamiento, el cifrado y la configuración de bloqueo de objetos. `delimiter` le da la semántica de carpeta habitual a través de `common_prefixes`, y `max_keys` está limitado a 1000 por página.

<Note>
  La eliminación masiva (`POST ?delete`) y la copia del lado del servidor (`x-amz-copy-source`) son funciones de punto final de S3. A través de la API de almacenamiento, elimine objetos uno a la vez.
</Note>


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