Zum Inhalt springen

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.

local cloudstorage = require("cloudstorage")

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()
ParameterTypBeschreibung
idstringSpeicherressourcen-ID

Gibt zurück: Storage, error

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()
ParameterTypBeschreibung
keystringObjektschlüssel/Pfad
contentstring oder ReaderInhalt als String oder Datei-Reader
optionstableOptionale Metadaten und Optionen für bedingtes Schreiben

Gibt zurück: boolean, error

Hängen Sie Metadaten an oder schützen Sie das Schreiben mit einer Optionstabelle:

storage:upload_object("reports/daily.json", body, {
content_type = "application/json",
cache_control = "max-age=3600",
metadata = { owner = "team-a", run_id = "1234" }, -- gespeichert als x-amz-meta-*
only_if_absent = true -- schlägt fehl, wenn der Schlüssel bereits existiert
})
OptionTypBeschreibung
content_typestringMIME-Typ
cache_controlstringCache-Control-Header
content_dispositionstringContent-Disposition-Header
content_encodingstringContent-Encoding-Header
metadatatableBenutzer-Metadaten (string-Schlüssel/-Werte), gespeichert als x-amz-meta-*
headerstableZusätzliche Request-Header (string-Schlüssel/-Werte)
if_matchstringNur schreiben, wenn das aktuelle Objekt-ETag übereinstimmt
if_none_matchstringNur schreiben, wenn kein Objekt mit dem ETag übereinstimmt ("*" bedeutet beliebig)
only_if_absentbooleanNur schreiben, wenn der Schlüssel nicht existiert (Alias für if_none_match = "*")

Ein bedingtes Schreiben, dessen Vorbedingung fehlschlägt, gibt einen precondition_failed-Fehler zurück.

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()
ParameterTypBeschreibung
keystringHerunterzuladender Objektschlüssel
writerWriterZiel-Datei-Writer
options.rangestringByte-Bereich (z.B. “bytes=0-1023”)
options.if_matchstringNur herunterladen, wenn das Objekt-ETag übereinstimmt
options.if_none_matchstringNur herunterladen, wenn das ETag nicht übereinstimmt

Gibt zurück: boolean, error

Eine fehlgeschlagene Vorbedingung (if_match/if_none_match) gibt einen precondition_failed-Fehler zurück.

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.etag)
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()
ParameterTypBeschreibung
options.prefixstringNach Schlüssel-Präfix filtern
options.max_keysintegerMaximale Anzahl zurückzugebender Objekte
options.continuation_tokenstringPaginierungs-Token
options.include_ownerbooleanDen owner jedes Objekts einbeziehen (id, display_name)
options.include_versionsbooleanObjektversionen auflisten; jedes Element enthält version_id

Gibt zurück: table, error

Ergebnis enthält objects, is_truncated, next_continuation_token. Jedes Objekt hat key, size, etag, storage_class sowie optional last_modified, version_id und owner.

In Listenergebnissen ist content_type immer leer — S3-Listenoperationen geben ihn nicht zurück. Verwenden Sie head_object, um den Content-Type und die Metadaten eines Objekts zu lesen.

Die Metadaten eines einzelnen Objekts abrufen, ohne dessen Body herunterzuladen:

local storage = cloudstorage.get("app.infra:files")
local meta, err = storage:head_object("reports/daily.json")
if err then
return nil, err
end
print(meta.size, meta.etag, meta.content_type)
for k, v in pairs(meta.metadata) do
print("meta", k, v)
end
storage:release()
ParameterTypBeschreibung
keystringObjektschlüssel

Gibt zurück: table, error

Ergebnisfelder:

FeldTypBeschreibung
sizeintegerObjektgröße in Bytes
etagstringEntity-Tag
content_typestringMIME-Typ
cache_controlstringCache-Control-Header
content_dispositionstringContent-Disposition-Header
content_encodingstringContent-Encoding-Header
storage_classstringSpeicherklasse
version_idstringVersions-ID (vorhanden, wenn Versionierung aktiviert ist)
last_modifiedintegerZeitpunkt der letzten Änderung (Unix-Sekunden)
metadatatableBenutzer-Metadaten (x-amz-meta-*)
headerstableRohe Response-Header (kleingeschriebene Schlüssel)

Ein fehlendes Objekt gibt einen not_found-Fehler zurück.

Mehrere Objekte entfernen:

local storage = cloudstorage.get("app.infra:files")
storage:delete_objects({
"temp/file1.txt",
"temp/file2.txt",
"temp/file3.txt"
})
storage:release()
ParameterTypBeschreibung
keysstring[]Array von zu löschenden Objektschlüsseln

Gibt zurück: boolean, error

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}
ParameterTypBeschreibung
keystringObjektschlüssel
options.expirationintegerSekunden bis URL abläuft (Standard: 3600)

Gibt zurück: string, error

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}
ParameterTypBeschreibung
keystringObjektschlüssel
options.expirationintegerSekunden bis URL abläuft (Standard: 3600)
options.content_typestringErforderlicher Content-Type für Upload
options.content_lengthintegerMaximale Upload-Größe in Bytes

Gibt zurück: string, error

MethodeGibt zurückBeschreibung
upload_object(key, content, opts?)boolean, errorString- oder Dateiinhalt hochladen
download_object(key, writer, opts?)boolean, errorIn Datei-Writer herunterladen
head_object(key)table, errorObjekt-Metadaten abrufen
list_objects(opts?)table, errorObjekte mit Präfix-Filter auflisten
delete_objects(keys)boolean, errorMehrere Objekte löschen
presigned_get_url(key, opts?)string, errorTemporäre Download-URL generieren
presigned_put_url(key, opts?)string, errorTemporäre Upload-URL generieren
release()booleanSpeicherressource freigeben

Cloud-Speicheroperationen unterliegen der Sicherheitsrichtlinienauswertung.

AktionRessourceBeschreibung
cloudstorage.getSpeicher-IDEine Speicherressource abrufen
BedingungArtWiederholbar
Leere Ressourcen-IDerrors.INVALIDnein
Ressource nicht gefundenerrors.NOT_FOUNDnein
Keine Cloud-Speicherressourceerrors.INVALIDnein
Speicher freigegebenerrors.INVALIDnein
Leerer Schlüsselerrors.INVALIDnein
Inhalt nilerrors.INVALIDnein
Writer nicht gültigerrors.INVALIDnein
Objekt nicht gefundenerrors.NOT_FOUNDnein
Bedingte Vorbedingung fehlgeschlagenerrors.CONFLICTnein
Berechtigung verweigerterrors.PERMISSION_DENIEDnein
Operation fehlgeschlagenerrors.INTERNALnein

Siehe Fehlerbehandlung für die Arbeit mit Fehlern.