云存储

访问 S3 兼容的对象存储。支持上传、下载、列出和管理文件,以及预签名 URL。

存储配置请参阅 云存储

加载

local cloudstorage = require("cloudstorage")

获取存储

通过注册表 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()
参数 类型 描述
id string 存储资源 ID

返回: Storage, error

上传对象

从字符串或文件上传内容:

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

-- 上传字符串内容
local ok, err = storage:upload_object("reports/daily.json", json.encode({
    date = "2024-01-15",
    total = 1234
}))

-- 从文件上传
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()
参数 类型 描述
key string 对象键/路径
content string 或 Reader 字符串内容或文件读取器

返回: boolean, error

下载对象

将对象下载到文件写入器:

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

-- 下载部分内容(前 1KB)
local partial = vol:open("/partial.bin", "w")
storage:download_object("backups/large-file.bin", partial, {
    range = "bytes=0-1023"
})
partial:close()

storage:release()
参数 类型 描述
key string 要下载的对象键
writer Writer 目标文件写入器
options.range string 字节范围(例如 "bytes=0-1023")

返回: boolean, error

列出对象

列出对象并可选按前缀过滤:

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

-- 分页浏览大量结果
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()
参数 类型 描述
options.prefix string 按键前缀过滤
options.max_keys integer 返回的最大对象数
options.continuation_token string 分页令牌

返回: table, error

结果包含 objectsis_truncatednext_continuation_token

删除对象

删除多个对象:

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

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

storage:release()
参数 类型 描述
keys string[] 要删除的对象键数组

返回: boolean, error

下载 URL

创建允许无凭证下载对象的临时 URL。适用于与外部用户共享文件或通过应用程序提供内容。

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 返回给客户端直接下载
return {download_url = url}
参数 类型 描述
key string 对象键
options.expiration integer URL 过期秒数(默认:3600)

返回: string, error

上传 URL

创建允许无凭证上传对象的临时 URL。使客户端能够直接上传文件到存储而无需通过服务器代理。

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 返回给客户端直接上传
return {upload_url = url}
参数 类型 描述
key string 对象键
options.expiration integer URL 过期秒数(默认:3600)
options.content_type string 上传所需的内容类型
options.content_length integer 最大上传大小(字节)

返回: string, error

存储方法

方法 返回 描述
upload_object(key, content) boolean, error 上传字符串或文件内容
download_object(key, writer, opts?) boolean, error 下载到文件写入器
list_objects(opts?) table, error 列出对象并按前缀过滤
delete_objects(keys) boolean, error 删除多个对象
presigned_get_url(key, opts?) string, error 生成临时下载 URL
presigned_put_url(key, opts?) string, error 生成临时上传 URL
release() boolean 释放存储资源

权限

云存储操作受安全策略评估约束。

操作 资源 描述
cloudstorage.get 存储 ID 获取存储资源

错误

条件 类型 可重试
资源 ID 为空 errors.INVALID
资源未找到 errors.NOT_FOUND
不是云存储资源 errors.INVALID
存储已释放 errors.INVALID
键为空 errors.INVALID
内容为 nil errors.INVALID
写入器无效 errors.INVALID
对象未找到 errors.NOT_FOUND
权限被拒绝 errors.PERMISSION_DENIED
操作失败 errors.INTERNAL

错误处理请参阅 错误处理