Agent 实例文件操作#
功能介绍#
该组 API 用于在已创建的 Agent 实例文件系统中进行文件上传、下载、列表和目录创建操作。所有操作通过 Frontend 已有的 TCP 隧道流式转发到 Agent Executor HTTP server,与 SSH、WebSocket 等通道复用同一鉴权连接。
接口约束#
instanceId必须为创建 Agent 实例时返回的instance_id(UUID)。不存在或已删除的实例返回 404。鉴权遵循 frontend 全局
GlobalJWTAuthMiddleware,与其它函数服务 REST API 一致。enable_func_token_auth开时须携带有效 JWT(见 Agent 实例协议调用通道 鉴权说明)。文件上传大小上限为 512MB(
maxFileUploadSize)。Frontend 在读取 body 前先校验Content-Length,超过 513MB(512MB + 1MB multipart 开销余量)直接返回 413 拒绝;Content-Length介于 512MB~513MB 之间的请求通过预校验,但若实际文件内容(去除 multipart 边界开销后)超过 512MB,则在流式读取时中止传输并返回 413。两种情况下,413 响应均在发送响应体之前返回,客户端可据此检测错误,减小文件后重试。下载支持 HTTP
Range头进行断点续传。对空文件(0 字节)发起带 Range 的下载请求返回 416(符合 RFC 7233),不带 Range 则正常返回 200 + 空响应体。上传使用
multipart/form-data表单,path字段必须在file字段之前。上传若目标文件已存在则覆盖(通过临时文件原子替换)。
所有接口的
path参数为实例内绝对路径。所有调用方须已通过 JWT 鉴权,视为可信用户。安全性由 Agent 实例自身的文件系统隔离(容器级或进程级沙箱)保证,不做额外的路径遍历校验。路径中包含 NUL 字节(\x00)时返回 400。mode参数为 3~4 位八进制字符串(正则^[0-7]{3,4}$),如644、755、4755。传入非法格式(如abc、999、7x5)时返回 400。特殊位(SUID4xxx、SGID2xxx、sticky1xxx)允许设置,与标准chmod行为一致。调用方对在实例内设置的权限自行负责。
上传文件#
URI#
POST /api/agent/:instanceId/files/upload
请求参数#
请求 Path 参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
instanceId |
是 |
string |
实例 ID(创建时返回的 UUID)。 |
请求 Query 参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
mode |
否 |
string |
文件权限(3~4 位八进制,如 |
请求 Body 参数(multipart/form-data)#
名称 |
类型 |
是否必选 |
描述 |
|---|---|---|---|
path |
string |
是 |
上传目标路径(实例内绝对路径)。必须在 |
file |
binary |
是 |
文件内容。 |
响应参数#
名称 |
类型 |
描述 |
|---|---|---|
code |
int |
状态码, |
success |
boolean |
是否上传成功。 |
path |
string |
实际写入路径。 |
size |
int |
实际写入字节数。 |
示例#
curl -X POST "http://{frontend}:8888/api/agent/0b6c6322-6533-4901-8000-00000000bb0b/files/upload?mode=644" \
-F "path=/home/agentos/upload.bin" \
-F "file=@./local_file.bin"
# 开启鉴权时携带:-H "X-Auth: <jwt>"
响应:
{"code":200,"success":true,"path":"/home/agentos/upload.bin","size":1048576}
错误码#
HTTP 状态 |
描述 |
|---|---|
200 |
上传成功。 |
400 |
错误的请求。 |
404 |
实例不存在或已删除。 |
413 |
文件大小超过 512MB 限制。 |
500 |
内部服务器错误。写入文件时发生 OS 级错误(如磁盘空间不足),或目标路径是已存在的目录。 |
下载文件#
URI#
GET /api/agent/:instanceId/files/download
请求参数#
请求 Path 参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
instanceId |
是 |
string |
实例 ID(创建时返回的 UUID)。 |
请求 Query 参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
path |
是 |
string |
下载文件路径(实例内绝对路径)。 |
请求 Header 参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
Range |
否 |
string |
标准 HTTP Range 头,用于断点续传。格式 |
响应参数#
响应体为文件的二进制流。响应头包含:
名称 |
类型 |
描述 |
|---|---|---|
Content-Type |
string |
始终为 |
Content-Length |
string |
响应体字节数。Range 请求时为分片长度(非文件总大小)。 |
Accept-Ranges |
string |
始终为 |
Content-Range |
string |
仅在 Range 请求成功时返回,格式 |
示例#
# 完整下载
curl -o ./downloaded.bin "http://{frontend}:8888/api/agent/0b6c6322-6533-4901-8000-00000000bb0b/files/download?path=/home/agentos/data.bin"
# 开启鉴权时携带:-H "X-Auth: <jwt>"
# 断点续传(从第 1024 字节开始)
curl -o ./rest.bin -H "Range: bytes=1024-" "http://{frontend}:8888/api/agent/0b6c6322-6533-4901-8000-00000000bb0b/files/download?path=/home/agentos/data.bin"
错误码#
HTTP 状态 |
描述 |
|---|---|
200 |
下载成功(无 Range 头)。 |
206 |
部分内容(Range 请求成功)。 |
400 |
|
404 |
实例不存在或文件路径不存在。 |
416 |
Range 请求不可满足(如空文件带 Range、start 超过文件大小)。 |
500 |
内部服务器错误。读取文件时发生 OS 级错误,或路径是目录。 |
列举文件#
URI#
GET /api/agent/:instanceId/files/list
请求参数#
请求 Path 参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
instanceId |
是 |
string |
实例 ID(创建时返回的 UUID)。 |
请求 Query 参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
path |
是 |
string |
列举目标路径(实例内绝对路径)。文件或目录均可。当 |
recursive |
否 |
string |
是否递归列举子目录。取值 |
max_depth |
否 |
int |
递归最大深度。仅在 |
系统限制:列举结果最多返回 10000 个条目(
DEFAULT_MAX_LIST_ENTRIES),递归深度最大 20 层(DEFAULT_MAX_LIST_DEPTH)。超过任一限制时,结果被截断为该上限。递归和非递归列举均受 30 秒超时限制(DEFAULT_LIST_TIMEOUT_SECONDS),超时返回 504 错误。
响应参数#
名称 |
类型 |
描述 |
|---|---|---|
code |
int |
状态码, |
items |
array |
文件/目录列表。每项见下表。 |
Item#
名称 |
类型 |
描述 |
|---|---|---|
name |
string |
文件/目录名。 |
path |
string |
完整路径。 |
size |
int |
字节数(目录为 0)。 |
is_directory |
boolean |
是否为目录。 |
modified_time |
string |
最后修改时间(ISO 8601 UTC)。 |
type |
string |
|
示例#
curl "http://{frontend}:8888/api/agent/0b6c6322-6533-4901-8000-00000000bb0b/files/list?path=/home/agentos&recursive=true&max_depth=2"
# 开启鉴权时携带:-H "X-Auth: <jwt>"
响应:
{
"code": 200,
"items": [
{"name": "data.bin", "path": "/home/agentos/data.bin", "size": 1048576, "is_directory": false, "modified_time": "2026-01-01T00:00:00+00:00", "type": "file"},
{"name": "logs", "path": "/home/agentos/logs", "size": 0, "is_directory": true, "modified_time": "2026-01-01T00:00:00+00:00", "type": "directory"}
]
}
错误码#
HTTP 状态 |
描述 |
|---|---|
200 |
列举成功。 |
400 |
|
404 |
实例不存在或路径不存在。 |
504 |
列举超时(默认 30 秒)。 |
创建目录#
URI#
POST /api/agent/:instanceId/files/mkdir
请求参数#
请求 Path 参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
instanceId |
是 |
string |
实例 ID(创建时返回的 UUID)。 |
请求 Query 参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
path |
是 |
string |
创建目录路径(实例内绝对路径)。 |
mode |
否 |
string |
目录权限(3~4 位八进制,如 |
recursive |
否 |
string |
是否递归创建父目录。取值 |
响应参数#
名称 |
类型 |
描述 |
|---|---|---|
code |
int |
状态码, |
success |
boolean |
是否创建成功。 |
path |
string |
实际创建路径。 |
created |
boolean |
目标目录本身是否为本次新建( |
示例#
curl -X POST "http://{frontend}:8888/api/agent/0b6c6322-6533-4901-8000-00000000bb0b/files/mkdir?path=/home/agentos/subdir&mode=755&recursive=true"
# 开启鉴权时携带:-H "X-Auth: <jwt>"
响应:
{"code":200,"success":true,"path":"/home/agentos/subdir","created":true}
错误码#
HTTP 状态 |
描述 |
|---|---|
200 |
创建成功。 |
400 |
|
404 |
实例不存在或已删除。 |
500 |
内部服务器错误。创建目录时发生 OS 级错误。 |