Skip to content

Static Bucket File 静态文件服务(文件操作)

static-bucket-file 命名空间负责操作某个 Bucket 内的具体文件,包括上传、读取、删除、重命名和列出文件。

与 Bucket 配置分离

本命名空间不修改 Bucket 配置(如 is_http_rootcors)。Bucket 配置的 CRUD 操作在 static-bucket 命名空间中完成。

权限结构

  • ScopeStaticBucket(name)Global
    • StaticBucket(name):只对该 bucket 生效
    • Global:对所有 bucket 生效(可用 * 通配)
  • Permission
    • StaticBucketFile::Read — 读取文件内容 (read)
    • StaticBucketFile::Write — 上传文件 (upload)
    • StaticBucketFile::Delete — 删除文件 (delete)
    • StaticBucketFile::List — 列出文件 (list)

为什么 List 是独立权限?

文件列表操作只暴露目录结构(文件名、大小、修改时间),不暴露文件内容。将 ListRead 分离,可以授予"看得见目录"但不"读得了内容"的权限粒度。

方法概览

方法名功能所需权限
static-bucket-file_upload上传文件StaticBucketFile::Write
static-bucket-file_read读取文件(base64 返回)StaticBucketFile::Read
static-bucket-file_delete删除文件StaticBucketFile::Delete
static-bucket-file_rename重命名 / 移动文件StaticBucketFile::Write + StaticBucketFile::Delete
static-bucket-file_list列出目录下所有文件StaticBucketFile::List

HTTP 访问静态文件

默认路由

GET /nodeget/static/{name}/{*path}

访问示例:

bash
curl http://localhost:3000/nodeget/static/my-site/index.html

cors: true 时,响应头会携带:

Access-Control-Allow-Origin: *

同时支持 OPTIONS 预检请求,返回 204 No Content 和对应的 CORS 头。

根路由代理(is_http_root)

当某条 Bucket 配置的 is_http_roottrue 时:

  • 服务器的根路由 / 和所有未匹配路由会直接返回该静态目录下的文件
  • WebSocket/terminal)和 JSON-RPC 不受影响
  • 未绑定 is_http_root 时,根路由继续返回默认的占位 HTML

示例:

bash
curl http://localhost:3000/index.html
# 实际返回磁盘上 {static_path}/{path}/index.html 的内容(path 为该 bucket 记录里的 path 字段)

注意事项

  • 文件 path 参数严格禁止目录遍历(.. 和绝对路径会被拒绝)
  • bodybase64 不能同时出现,否则返回 InvalidInput
  • 所有文件路径都经过 resolve_safe_file_path 双重校验,拒绝 .. 穿透、绝对路径、反斜杠、Windows 盘符等