Cloud Storage

Acesse armazenamento de objetos compativel com S3. Upload, download, listagem e gerenciamento de arquivos com suporte a URLs pre-assinadas.

Para configuração de armazenamento, veja Cloud Storage.

Carregamento

local cloudstorage = require("cloudstorage")

Adquirindo Storage

Obter um recurso de cloud storage por ID do 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 Descrição
id string ID do recurso de armazenamento

Retorna: Storage, error

Fazendo Upload de Objetos

Upload de conteudo de string ou arquivo:

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

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

-- Upload de arquivo
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 Descrição
key string Chave/caminho do objeto
content string ou Reader Conteudo como string ou file reader

Retorna: boolean, error

Baixando Objetos

Baixar um objeto para um file writer:

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()

-- Baixar conteudo parcial (primeiro 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 Descrição
key string Chave do objeto para baixar
writer Writer File writer de destino
options.range string Faixa de bytes (ex: "bytes=0-1023")

Retorna: boolean, error

Listando Objetos

Listar objetos com filtragem opcional por prefixo:

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 através 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 Descrição
options.prefix string Filtrar por prefixo de chave
options.max_keys integer Maximo de objetos a retornar
options.continuation_token string Token de paginação

Retorna: table, error

Resultado contem objects, is_truncated, next_continuation_token.

Deletando Objetos

Remover multiplos 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 Descrição
keys string[] Array de chaves de objetos para deletar

Retorna: boolean, error

URLs de Download

Criar uma URL temporaria que permite baixar um objeto sem credenciais. Util para compartilhar arquivos com usuários externos ou servir conteudo através da sua aplicação.

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

-- Retornar URL ao cliente para download direto
return {download_url = url}
Parâmetro Tipo Descrição
key string Chave do objeto
options.expiration integer Segundos até URL expirar (padrão: 3600)

Retorna: string, error

URLs de Upload

Criar uma URL temporaria que permite fazer upload de um objeto sem credenciais. Permite que clientes facam upload de arquivos diretamente para o armazenamento sem fazer proxy pelo seu 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

-- Retornar URL ao cliente para upload direto
return {upload_url = url}
Parâmetro Tipo Descrição
key string Chave do objeto
options.expiration integer Segundos até URL expirar (padrão: 3600)
options.content_type string Content type obrigatorio para upload
options.content_length integer Tamanho maximo de upload em bytes

Retorna: string, error

Métodos de Storage

Método Retorna Descrição
upload_object(key, content) boolean, error Upload de string ou conteudo de arquivo
download_object(key, writer, opts?) boolean, error Download para file writer
list_objects(opts?) table, error Listar objetos com filtro de prefixo
delete_objects(keys) boolean, error Deletar multiplos objetos
presigned_get_url(key, opts?) string, error Gerar URL temporaria de download
presigned_put_url(key, opts?) string, error Gerar URL temporaria de upload
release() boolean Liberar recurso de storage

Permissões

Operações de cloud storage estao sujeitas a avaliação de política de segurança.

Ação Recurso Descrição
cloudstorage.get ID do Storage Adquirir um recurso de storage

Erros

Condição Tipo Retentável
ID de recurso vazio errors.INVALID não
Recurso não encontrado errors.NOT_FOUND não
Não e recurso cloud storage errors.INVALID não
Storage liberado errors.INVALID não
Chave vazia errors.INVALID não
Conteudo nil errors.INVALID não
Writer não valido errors.INVALID não
Objeto não encontrado errors.NOT_FOUND não
Permissão negada errors.PERMISSION_DENIED não
Operação falhou errors.INTERNAL não

Veja Error Handling para trabalhar com erros.