Almacenamiento en la Nube

Acceder a almacenamiento de objetos compatible con S3. Cargar, descargar, listar y gestionar archivos con soporte de URL prefirmadas.

Para configuración de almacenamiento, consulte Almacenamiento en la Nube.

Carga

local cloudstorage = require("cloudstorage")

Adquirir Almacenamiento

Obtener un recurso de almacenamiento en la nube por ID de registro:

local storage, err = cloudstorage.get("app.infra:files")
if err then
    return nil, err
end

storage:upload_object("data/file.txt", "content")
storage:release()
Parámetro Tipo Descripción
id string ID de recurso de almacenamiento

Devuelve: Storage, error

Cargar Objetos

Cargar contenido desde string o archivo:

local storage = cloudstorage.get("app.infra:files")

-- Cargar contenido string
local ok, err = storage:upload_object("reports/daily.json", json.encode({
    date = "2024-01-15",
    total = 1234
}))

-- Cargar desde archivo
local fs = require("fs")
local vol = fs.get("app:data")
local file = vol:open("/large-file.bin", "r")

storage:upload_object("backups/large-file.bin", file)
file:close()

storage:release()
Parámetro Tipo Descripción
key string Clave/ruta del objeto
content string o Reader Contenido como string o lector de archivo

Devuelve: boolean, error

Descargar Objetos

Descargar un objeto a un escritor de archivo:

local storage = cloudstorage.get("app.infra:files")
local fs = require("fs")
local vol = fs.get("app:temp")

local file = vol:open("/downloaded.json", "w")
local ok, err = storage:download_object("reports/daily.json", file)
file:close()

-- Descargar contenido parcial (primeros 1KB)
local partial = vol:open("/partial.bin", "w")
storage:download_object("backups/large-file.bin", partial, {
    range = "bytes=0-1023"
})
partial:close()

storage:release()
Parámetro Tipo Descripción
key string Clave del objeto a descargar
writer Writer Escritor de archivo destino
options.range string Rango de bytes (ej., "bytes=0-1023")

Devuelve: boolean, error

Listar Objetos

Listar objetos con filtro de prefijo opcional:

local storage = cloudstorage.get("app.infra:files")

local result, err = storage:list_objects({
    prefix = "reports/2024/",
    max_keys = 100
})

for _, obj in ipairs(result.objects) do
    print(obj.key, obj.size, obj.content_type)
end

-- Paginar a traves de resultados grandes
local token = nil
repeat
    local result = storage:list_objects({
        prefix = "logs/",
        max_keys = 1000,
        continuation_token = token
    })
    for _, obj in ipairs(result.objects) do
        process(obj)
    end
    token = result.next_continuation_token
until not result.is_truncated

storage:release()
Parámetro Tipo Descripción
options.prefix string Filtrar por prefijo de clave
options.max_keys integer Objetos maximos a devolver
options.continuation_token string Token de paginacion

Devuelve: table, error

El resultado contiene objects, is_truncated, next_continuation_token.

Eliminar Objetos

Eliminar multiples objetos:

local storage = cloudstorage.get("app.infra:files")

storage:delete_objects({
    "temp/file1.txt",
    "temp/file2.txt",
    "temp/file3.txt"
})

storage:release()
Parámetro Tipo Descripción
keys string[] Array de claves de objeto a eliminar

Devuelve: boolean, error

URLs de Descarga

Crear una URL temporal que permite descargar un objeto sin credenciales. Util para compartir archivos con usuarios externos o servir contenido a traves de su aplicación.

local storage, err = cloudstorage.get("app.infra:files")
if err then
    return nil, err
end

local url, err = storage:presigned_get_url("reports/quarterly.pdf", {
    expiration = 3600
})

storage:release()

if err then
    return nil, err
end

-- Devolver URL al cliente para descarga directa
return {download_url = url}
Parámetro Tipo Descripción
key string Clave del objeto
options.expiration integer Segundos hasta que expire la URL (predeterminado: 3600)

Devuelve: string, error

URLs de Carga

Crear una URL temporal que permite cargar un objeto sin credenciales. Permite a los clientes cargar archivos directamente al almacenamiento sin pasar por su servidor.

local storage, err = cloudstorage.get("app.infra:files")
if err then
    return nil, err
end

local url, err = storage:presigned_put_url("uploads/user-123/avatar.jpg", {
    expiration = 600,
    content_type = "image/jpeg",
    content_length = 1024 * 1024
})

storage:release()

if err then
    return nil, err
end

-- Devolver URL al cliente para carga directa
return {upload_url = url}
Parámetro Tipo Descripción
key string Clave del objeto
options.expiration integer Segundos hasta que expire la URL (predeterminado: 3600)
options.content_type string Tipo de contenido requerido para carga
options.content_length integer Tamano maximo de carga en bytes

Devuelve: string, error

Metodos de Storage

Método Devuelve Descripción
upload_object(key, content) boolean, error Cargar contenido string o archivo
download_object(key, writer, opts?) boolean, error Descargar a escritor de archivo
list_objects(opts?) table, error Listar objetos con filtro de prefijo
delete_objects(keys) boolean, error Eliminar multiples objetos
presigned_get_url(key, opts?) string, error Generar URL de descarga temporal
presigned_put_url(key, opts?) string, error Generar URL de carga temporal
release() boolean Liberar recurso de almacenamiento

Permisos

Las operaciones de almacenamiento en la nube estan sujetas a evaluacion de politica de seguridad.

Accion Recurso Descripción
cloudstorage.get ID de Storage Adquirir un recurso de almacenamiento

Errores

Condición Tipo Reintentable
ID de recurso vacio errors.INVALID no
Recurso no encontrado errors.NOT_FOUND no
No es recurso de almacenamiento en la nube errors.INVALID no
Almacenamiento liberado errors.INVALID no
Clave vacia errors.INVALID no
Contenido nil errors.INVALID no
Writer no valido errors.INVALID no
Objeto no encontrado errors.NOT_FOUND no
Permiso denegado errors.PERMISSION_DENIED no
Operación fallida errors.INTERNAL no

Consulte Manejo de Errores para trabajar con errores.