Cloud-Speicher

Zugriff auf S3-kompatiblen Objektspeicher. Hochladen, Herunterladen, Auflisten und Verwalten von Dateien mit Unterstützung für vorsignierte URLs.

Für Speicherkonfiguration siehe Cloud-Speicher.

Laden

local cloudstorage = require("cloudstorage")

Speicher abrufen

Holen Sie eine Cloud-Speicherressource anhand der Registry-ID:

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

storage:upload_object("data/file.txt", "content")
storage:release()
Parameter Typ Beschreibung
id string Speicherressourcen-ID

Gibt zurück: Storage, error

Objekte hochladen

Inhalt aus String oder Datei hochladen:

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

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

-- Aus Datei hochladen
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()
Parameter Typ Beschreibung
key string Objektschlüssel/Pfad
content string oder Reader Inhalt als String oder Datei-Reader

Gibt zurück: boolean, error

Objekte herunterladen

Objekt in einen Datei-Writer herunterladen:

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

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

storage:release()
Parameter Typ Beschreibung
key string Herunterzuladender Objektschlüssel
writer Writer Ziel-Datei-Writer
options.range string Byte-Bereich (z.B. "bytes=0-1023")

Gibt zurück: boolean, error

Objekte auflisten

Objekte mit optionaler Präfix-Filterung auflisten:

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

-- Durch große Ergebnisse paginieren
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()
Parameter Typ Beschreibung
options.prefix string Nach Schlüssel-Präfix filtern
options.max_keys integer Maximale Anzahl zurückzugebender Objekte
options.continuation_token string Paginierungs-Token

Gibt zurück: table, error

Ergebnis enthält objects, is_truncated, next_continuation_token.

Objekte löschen

Mehrere Objekte entfernen:

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

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

storage:release()
Parameter Typ Beschreibung
keys string[] Array von zu löschenden Objektschlüsseln

Gibt zurück: boolean, error

Download-URLs

Erstellen Sie eine temporäre URL, die das Herunterladen eines Objekts ohne Anmeldeinformationen ermöglicht. Nützlich zum Teilen von Dateien mit externen Benutzern oder zum Bereitstellen von Inhalten über Ihre Anwendung.

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

-- URL an Client für direkten Download zurückgeben
return {download_url = url}
Parameter Typ Beschreibung
key string Objektschlüssel
options.expiration integer Sekunden bis URL abläuft (Standard: 3600)

Gibt zurück: string, error

Upload-URLs

Erstellen Sie eine temporäre URL, die das Hochladen eines Objekts ohne Anmeldeinformationen ermöglicht. Ermöglicht Clients, Dateien direkt in den Speicher hochzuladen, ohne über Ihren Server zu proxyen.

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

-- URL an Client für direkten Upload zurückgeben
return {upload_url = url}
Parameter Typ Beschreibung
key string Objektschlüssel
options.expiration integer Sekunden bis URL abläuft (Standard: 3600)
options.content_type string Erforderlicher Content-Type für Upload
options.content_length integer Maximale Upload-Größe in Bytes

Gibt zurück: string, error

Storage-Methoden

Methode Gibt zurück Beschreibung
upload_object(key, content) boolean, error String- oder Dateiinhalt hochladen
download_object(key, writer, opts?) boolean, error In Datei-Writer herunterladen
list_objects(opts?) table, error Objekte mit Präfix-Filter auflisten
delete_objects(keys) boolean, error Mehrere Objekte löschen
presigned_get_url(key, opts?) string, error Temporäre Download-URL generieren
presigned_put_url(key, opts?) string, error Temporäre Upload-URL generieren
release() boolean Speicherressource freigeben

Berechtigungen

Cloud-Speicheroperationen unterliegen der Sicherheitsrichtlinienauswertung.

Aktion Ressource Beschreibung
cloudstorage.get Speicher-ID Eine Speicherressource abrufen

Fehler

Bedingung Art Wiederholbar
Leere Ressourcen-ID errors.INVALID nein
Ressource nicht gefunden errors.NOT_FOUND nein
Keine Cloud-Speicherressource errors.INVALID nein
Speicher freigegeben errors.INVALID nein
Leerer Schlüssel errors.INVALID nein
Inhalt nil errors.INVALID nein
Writer nicht gültig errors.INVALID nein
Objekt nicht gefunden errors.NOT_FOUND nein
Berechtigung verweigert errors.PERMISSION_DENIED nein
Operation fehlgeschlagen errors.INTERNAL nein

Siehe Fehlerbehandlung für die Arbeit mit Fehlern.