Skip to content

存储 — RPC Manual

方法索引

控制面方法

方法说明
storage.put_objectInline 写入小对象
storage.get_objectInline 读取小对象
storage.head_object查询元数据
storage.delete_object删除对象
storage.list_objects列举对象
storage.list_prefixes列举子目录
storage.get_quota查询配额

数据面协调方法

方法说明
storage.create_upload_session申请上传 URL
storage.complete_upload确认上传完成
storage.create_download_ticket申请下载 URL

object_key 当前仅支持 ASCII 安全字符集合 [A-Za-z0-9._/-],且不允许空路径段、..、反斜杠转义后的非法段。

storage.put_object

上传小对象(内容 base64 编码通过 RPC 传输)。

参数

参数类型必填说明
object_keystring对象路径
contentstringbase64 编码内容
content_typestringMIME 类型,默认 "application/octet-stream"
bucketstring存储桶,默认 "default"
owner_aidstring所有者 AID,默认当前用户
is_privateboolean是否私有,默认 true
overwriteboolean是否覆盖已有对象,默认 true
expected_versioninteger乐观并发控制版本号
expire_in_secondsinteger过期时间(秒),0 表示不过期
metadataobject自定义元数据

响应

字段类型说明
owner_aidstring所有者 AID
bucketstring存储桶
object_keystring对象路径
size_bytesinteger对象大小(字节)
content_typestringMIME 类型
sha256stringSHA-256 哈希
versioninteger版本号
etagstring实体标签
updated_atinteger更新时间戳

示例

python
import base64

content = base64.b64encode(b"Hello World").decode()
result = await client.call("storage.put_object", {
    "object_key": "notes/hello.txt",
    "content": content,
    "content_type": "text/plain",
})

storage.get_object

读取小对象,返回 base64 编码内容。

参数

参数类型必填说明
object_keystring对象路径
bucketstring存储桶,默认 "default"
owner_aidstring所有者 AID,默认当前用户

响应

字段类型说明
owner_aidstring所有者 AID
bucketstring存储桶
object_keystring对象路径
contentstringbase64 编码内容
content_typestringMIME 类型
size_bytesinteger对象大小(字节)
sha256stringSHA-256 哈希
versioninteger版本号
updated_atinteger更新时间戳

注意:实现不返回 etag(与 put_object/head_object 不同)。

示例

python
result = await client.call("storage.get_object", {
    "object_key": "notes/hello.txt",
})
content = base64.b64decode(result["content"])

storage.head_object

查询对象元数据,不返回内容。

参数

参数类型必填说明
object_keystring对象路径
bucketstring存储桶,默认 "default"
owner_aidstring所有者 AID,默认当前用户

响应

字段类型说明
owner_aidstring所有者 AID
bucketstring存储桶
object_keystring对象路径
content_typestringMIME 类型
size_bytesinteger对象大小(字节)
sha256stringSHA-256 哈希
versioninteger版本号
etagstring实体标签
is_privateboolean是否私有
expire_atinteger过期时间戳(0 表示不过期)
created_atinteger创建时间戳
updated_atinteger更新时间戳

storage.delete_object

删除对象。

参数

参数类型必填说明
object_keystring对象路径
bucketstring存储桶,默认 "default"
owner_aidstring所有者 AID,默认当前用户

响应

字段类型说明
deletedboolean是否成功删除(false 表示对象不存在)
owner_aidstring所有者 AID
object_keystring对象路径

storage.list_objects

列出对象。

参数

参数类型必填说明
prefixstring路径前缀过滤
bucketstring存储桶,默认 "default"
owner_aidstring所有者 AID,默认当前用户
pageinteger页码,默认 1
sizeinteger每页条数,默认 50(最大 200)
markerstring深度分页游标;传入时优先按游标分页

响应

字段类型说明
itemsarray对象元数据列表
totalinteger总条数
pageinteger当前页码
sizeinteger每页条数
markerstring当前游标标记
next_markerstring下一页游标标记(为空表示无更多数据)

每个 item 包含:

字段类型说明
object_keystring对象路径
size_bytesinteger对象大小(字节)
content_typestringMIME 类型
sha256stringSHA-256 哈希
versioninteger版本号
is_privateboolean是否私有
updated_atinteger更新时间戳

示例

python
result = await client.call("storage.list_objects", {
    "prefix": "notes/",
    "size": 20,
})
for obj in result["items"]:
    print(f"{obj['object_key']} ({obj['size_bytes']} bytes)")

storage.list_prefixes

列出直接子目录(前缀)。

参数

参数类型必填说明
prefixstring路径前缀过滤
bucketstring存储桶,默认 "default"
owner_aidstring所有者 AID,默认当前用户
sizeinteger每页条数上限

响应

字段类型说明
prefixesstring[]直接子目录列表
countinteger子目录数量
sizeinteger实际生效的每页上限

storage.get_quota

查询存储配额。

参数

参数类型必填说明
owner_aidstring查询指定 AID 的配额(默认为当前用户,仅允许查询自己的配额)

响应

字段类型说明
owner_aidstring所有者 AID
used_bytesinteger已使用空间(字节)
object_countinteger对象数量
quota_bytesinteger配额上限(字节),0 表示无限制

storage.create_upload_session

获取上传用 presigned URL。

参数

参数类型必填说明
object_keystring对象路径
size_bytesinteger声明的文件大小(字节)。当前实现允许省略,但建议传入用于客户端追踪与最终校验
content_typestringMIME 类型,默认 "application/octet-stream"
bucketstring存储桶,默认 "default"
owner_aidstring所有者 AID,默认当前用户
expected_versioninteger乐观并发控制版本号
expire_in_secondsintegerURL 有效期(秒),默认 3600

响应

字段类型说明
upload_urlstring上传用 presigned URL
blob_keystringBlob 存储 key
expire_atintegerURL 过期时间戳
owner_aidstring所有者 AID
bucketstring存储桶
object_keystring对象路径
content_typestringMIME 类型
size_bytesinteger声明的文件大小

客户端获得 upload_url 后,通过 HTTP PUT 上传文件数据。

当前实现会对 BlobStore 返回的 loopback URL 做对外地址规范化:优先使用 KITE_STORAGE_EXTERNAL_URL,否则按 storage.{issuer} 形式改写。对外地址不可使用 127.0.0.1localhost

当前实现不会在 create_upload_session 阶段强校验配额或最终文件大小;这些检查会在 storage.complete_upload 阶段执行。


storage.complete_upload

完成上传,提交校验信息。

参数

参数类型必填说明
object_keystring对象路径
sha256string文件 SHA-256 哈希
bucketstring存储桶,默认 "default"
owner_aidstring所有者 AID,默认当前用户
content_typestringMIME 类型,默认 "application/octet-stream"
is_privateboolean是否私有,默认 true
size_bytesinteger预期文件大小(用于校验)
expected_versioninteger乐观并发控制版本号
expire_in_secondsinteger过期时间(秒)
metadataobject自定义元数据

响应

字段类型说明
owner_aidstring所有者 AID
bucketstring存储桶
object_keystring对象路径
size_bytesinteger对象大小(字节)
content_typestringMIME 类型
sha256stringSHA-256 哈希
versioninteger版本号
etagstring实体标签
updated_atinteger更新时间戳

storage.create_download_ticket

获取下载 URL。

参数

参数类型必填说明
object_keystring对象路径
bucketstring存储桶,默认 "default"
owner_aidstring所有者 AID,默认当前用户(公开对象可指定其他 AID)
expire_in_secondsintegerURL 有效期(秒),默认 3600

响应

字段类型说明
download_urlstring下载用 presigned URL
expire_atintegerURL 过期时间戳
file_namestring文件名(从 object_key 提取)
size_bytesinteger文件大小(字节)
content_typestringMIME 类型
sha256stringSHA-256 哈希
versioninteger版本号
etagstring实体标签

客户端获得 download_url 后,通过 HTTP GET 下载文件。

当前实现会对 BlobStore 返回的 loopback URL 做对外地址规范化:优先使用 KITE_STORAGE_EXTERNAL_URL,否则按 storage.{issuer} 形式改写。对外地址不可使用 127.0.0.1localhost


事件

event/storage.object_changed

对象变更时推送。

Payload

json
{
    "module_id": "storage",
    "action": "put",
    "owner_aid": "alice.agentid.pub",
    "object_key": "notes/hello.txt"
}
字段类型说明
module_idstring当前模块 ID,通常为 "storage"
actionstring"put""delete"
owner_aidstring对象所有者 AID
object_keystring对象路径

当前实现在 storage.put_object 成功后推送 action="put"storage.delete_object 返回 deleted=true 时推送 action="delete"storage.complete_upload 成功后也会推送 action="put" 事件。


错误码

code说明
-32002服务暂不可用(数据库未连接)
-32004权限拒绝(requester 不是对象 owner,或非公开对象的读权限不足)
-32008对象不存在(ErrNotFound
-32009版本冲突(ErrVersionConflictexpected_version 与实际版本不匹配)
-32000通用错误(参数校验失败、配额不足、base64 解码失败、文件大小超限等)

AUN Protocol Documentation