Install
openclaw skills install ecloud-eos移动云对象存储(EOS)技能。当用户需要上传、下载、管理云存储文件等操作时使用此技能。
openclaw skills install ecloud-eos通过 Node.js SDK 脚本管理移动云对象存储。
当用户首次要求操作 EOS 时,按以下流程操作:
检测操作系统并运行相应的检查脚本:
Windows 系统:
{baseDir}\scripts\setup.ps1 -CheckOnly
Linux/macOS 系统:
{baseDir}/scripts/setup.sh --check-only
检查脚本会验证以下内容:
EOS_ACCESS_KEY — 移动云对象存储 API 密钥 IDEOS_SECRET_KEY — 移动云对象存储 API 密钥 KeyEOS_REGION — 存储桶区域EOS_BUCKET — 存储桶名称EOS_ENDPOINT — 存储桶公网域名判断标准:
EOS_BUCKET,仍可执行部分操作:
list-buckets(列出所有存储桶)create-bucket(创建新存储桶,需要手动指定桶名)delete-bucket(删除存储桶,需要手动指定桶名)如果输出显示一切 OK(nodejs sdk 已安装、环境变量已配置),跳到「执行策略」。
方式一:直接提供凭证信息
我需要您的移动云凭证来连接 EOS 存储服务。请提供:
- AccessKey — 移动云对象存储 API 密钥 ID
- SecretKey — 移动云对象存储 API 密钥 Key
- Region — 存储桶区域
- Bucket — 存储桶名称
- Endpoint — 存储桶公网域名
您可以参考 移动云控制台-首页 订购对象存储。 您可以参考 移动云控制台-创建认证信息 获取 AK/SK 认证信息。 您可以参考 移动云控制台-地域和访问域名 获取最新的地域和域名信息。
方式二:使用配置文件
告诉用户:
您也可以提供一个配置文件,包含凭证信息。配置文件格式如下:
accessKey=your-access-key secretKey=your-secret-key region=anhui1 # 请根据最新地域列表选择合适的region bucket=your-bucket-name endpoint=https://eos-anhui-1.cmecloud.cn # 请根据最新地域列表选择对应endpoint配置文件模板位于:
references/config_template.properties请将配置文件路径提供给我,我会使用它来设置环境。
方式一:使用命令行参数
Windows 系统:
{baseDir}\scripts\setup.ps1 -AccessKey "<AccessKey>" -SecretKey "<SecretKey>" -Region "<Region>" -Bucket "<Bucket>" -Endpoint "<Endpoint>"
Linux/macOS 系统:
{baseDir}/scripts/setup.sh --access-key "<AccessKey>" --secret-key "<SecretKey>" --region "<Region>" --bucket "<Bucket>" --endpoint "<Endpoint>"
方式二:使用配置文件
Windows 系统:
{baseDir}\scripts\setup.ps1 -CopyConfigFile "<path-to-config-file>"
Linux/macOS 系统:
{baseDir}/scripts/setup.sh --copy-config-file "<path-to-config-file>"
脚本会自动:
重要说明:
process.env,以便后续子进程能够读取到最新的环境变量:
// agent 更新自己的 process.env
process.env.EOS_ACCESS_KEY = accessKey;
process.env.EOS_SECRET_KEY = secretKey;
process.env.EOS_REGION = region;
process.env.EOS_BUCKET = bucket;
process.env.EOS_ENDPOINT = endpoint;
配置完成后,按照以下策略执行 EOS 操作:
官方文档: https://ecloud.10086.cn/op-help-center/doc/outline/56247
通过 scripts/eos_node.mjs 执行存储操作。凭证从环境变量读取。
以下省略
node {baseDir}/scripts/eos_node.mjs前缀。完整格式:node {baseDir}/scripts/eos_node.mjs <action> [options]
# 列出所有存储桶
list-buckets
# 创建桶(需要手动指定桶名)
create-bucket --bucket my-new-bucket
# 删除桶(需要手动指定桶名,注意:桶必须为空才能删除)
delete-bucket --bucket my-old-bucket
# 清空桶(删除桶内所有文件,⚠️ 高危操作,必须使用 --confirm 参数确认)
empty-bucket --bucket my-bucket --confirm
# 切换存储桶(使用 setup 脚本)
#
# 切换存储桶需要调用 setup 脚本,因为需要更新系统环境变量。
# 调用方式如下:
#
# Windows 系统:
# {baseDir}\scripts\setup.ps1 -SetBucket <bucket-name>
#
# Linux/macOS 系统:
# {baseDir}/scripts/setup.sh --set-bucket <bucket-name>
#
# 示例:
# Windows: {baseDir}\scripts\setup.ps1 -SetBucket my-new-bucket
# Linux/macOS: {baseDir}/scripts/setup.sh --set-bucket my-new-bucket
#
# 说明:
# - 切换桶后,系统环境变量会被更新,新会话会自动使用新的桶
# - 切换操作会验证新桶是否可访问
# - 如果新桶不存在或无权限,会显示警告信息
# - **agent 必须更新自己的 process.env.EOS_BUCKET**:调用 setup.ps1 -SetBucket 后,agent 应该更新自己的 `process.env.EOS_BUCKET`,以便后续子进程能够读取到新的桶名
# 查询桶访问权限
get-bucket-acl
# 设置桶访问权限(private、public-read、public-read-write)
set-bucket-acl --acl private
# 设置防盗链(白名单模式,只允许指定域名访问)
set-referer --referers "https://example.com,https://www.example.com" --type allow
# 设置防盗链(黑名单模式,拒绝指定域名访问)
set-referer --referers "https://evil.com" --type deny
# 查询防盗链设置
get-referer
# 删除防盗链
delete-referer
# 上传文件
upload-object --file /path/to/file.jpg --key remote/path/file.jpg
# 下载文件
download-object --key remote/path/file.jpg --output /path/to/save/file.jpg
# 复制文件(同一桶内)
copy-object --source-key remote/path/source.jpg --dest-key remote/path/destination.jpg
# 复制文件(跨桶)
copy-object --source-key remote/path/source.jpg --dest-key remote/path/destination.jpg --dest-bucket target-bucket
# 列出文件(⚠️ 高危操作,遵循安全规范)
list-objects
# 带前缀列出文件(推荐做法:缩小查询范围)
list-objects --prefix "images/"
# 限制每页返回数量(默认100,最大100)
list-objects --max-keys 50
# 分页获取下一页(使用上一次返回的 nextMarker,每次翻页需用户确认)
list-objects --max-keys 50 --marker "file50.jpg"
# 查看文件信息
head-object --key remote/path/file.jpg
# 判断文件是否存在
exists-object --key remote/path/file.jpg
# 查询文件访问权限
get-object-acl --key remote/path/file.jpg
# 设置文件访问权限(private、public-read、public-read-write)
set-object-acl --key remote/path/file.jpg --acl public-read
# 生成文件共享外链(默认过期时间3600秒)
generate-url --key remote/path/file.jpg
# 生成文件共享外链(自定义过期时间,单位:秒)
generate-url --key remote/path/file.jpg --expires 7200
# 删除文件
delete-object --key remote/path/file.jpg
所有命令输出 JSON 格式,success: true 表示成功,退出码 0。
图片处理扩展能力见下方“图片处理能力(新增)”章节。
scripts/ 目录下的任何文件
scripts/eos_node.mjs、scripts/setup.ps1、scripts/setup.sh 等文件{baseDir}\scripts\setup.ps1 -CheckOnly{baseDir}/scripts/setup.sh --check-onlyEOS_BUCKET,仍可执行以下操作:
list-buckets(列出所有存储桶)create-bucket(创建新存储桶,需要手动指定桶名)delete-bucket(删除存储桶,需要手动指定桶名){baseDir}\scripts\setup.ps1 -CheckOnly{baseDir}/scripts/setup.sh --check-onlyobjectKey/EOSpath/--key)为存储桶内的相对路径,如 images/photo.jpgscripts/eos_node.mjs--max-keys(最大 100)isTruncated 字段,如果有更多数据,提示用户可以继续查询下一页,每次翻页都需要用户确认--prefix 参数缩小查询范围,避免全量列举# 第一页查询
node {baseDir}/scripts/eos_node.mjs list-objects --max-keys 100
# 如果返回 isTruncated=true,记录 nextMarker 值
# 第二页查询(需用户确认)
node {baseDir}/scripts/eos_node.mjs list-objects --max-keys 100 --marker "file100.jpg"
--prefix 参数缩小查询范围--confirm 参数,否则脚本会拒绝执行delete-bucket 操作会失败,错误消息会明确告知用户需要使用 empty-bucket --confirm 命令清空桶# 尝试删除非空桶(会失败)
node {baseDir}/scripts/eos_node.mjs delete-bucket --bucket my-bucket
# 返回错误:桶不为空,无法删除。请先使用 empty-bucket 命令清空桶内的所有文件。
# 注意:清空桶是高危操作,需要使用 --confirm 参数确认。
# 用户决定清空桶(必须使用 --confirm 参数)
node {baseDir}/scripts/eos_node.mjs empty-bucket --bucket my-bucket --confirm
# 清空完成后,再删除桶
node {baseDir}/scripts/eos_node.mjs delete-bucket --bucket my-bucket
list-objects 确认要删除的文件,对于生产环境的桶,建议先备份重要数据以下内容为 EOS skill 新增的图片处理扩展,集中维护,避免与原有对象存储操作说明耦合。
@smithy/hash-node、@smithy/protocol-httpscripts/eos_node.mjs
x-eos-process 的签名访问链接”的轻量能力scripts/eos_image.mjs
sys/saveas 持久化回桶# 生成图片处理签名链接
node {baseDir}/scripts/eos_image.mjs generate-url --key images/avatar.jpg --process "image/resize,w_400,h_400"
# 下载处理后的图片
node {baseDir}/scripts/eos_image.mjs download-object --key images/avatar.jpg --process "image/resize,w_400,h_400/rounded-corners,r_24" --output /tmp/avatar.png
# 持久化处理结果到当前桶
node {baseDir}/scripts/eos_image.mjs saveas-object --key images/avatar.jpg --process "image/resize,w_800,h_800/format,png" --target-key derived/avatar-800.png
# 持久化处理结果到指定桶
node {baseDir}/scripts/eos_image.mjs saveas-object --bucket source-bucket --key images/avatar.jpg --process "image/watermark,text_SGVsbG8" --target-bucket target-bucket --target-key outputs/avatar-watermark.jpg
info、average-hue 返回文本结果x-eos-process 纳入签名 URL|sys/saveas,... 时才会回写到桶data_deliver 用户开启 bucket policy 中的 GetObject 和 PutObject 权限;未开启时禁止使用图片处理图片处理仅支持以下资源池:
除以上资源池外,其他资源池均不支持图片处理,表现为对象 URL 后拼接的处理参数无效。
data_deliver 用户开启 bucket policy 中的 GetObject 和 PutObject 权限;若未开启,必须停止图片处理,并提示用户先完成 bucket policy 配置sys/saveasimage/<action>[,<param>_<value>...]/<action>[,<param>_<value>...]image/...|sys/saveas,o_<object-key-base64url>,b_<bucket-base64url>sys/saveas 中的对象 key 和桶名都需要使用 URL-safe Base64 编码resize、crop、circle、info、rounded-corners、rotate、average-hue、watermark 等都视为 --process 里的子动作,不单独定义为 CLI 一级命令image/resize,w_200,h_200
image/crop,w_100,h_100,g_center
image/circle
image/info
image/rounded-corners,r_20
image/rotate,90
image/average-hue
image/resize,w_800,h_800/crop,w_400,h_400,g_center/rotate,90
image/resize,w_1024,h_1024/format,png|sys/saveas,o_ZGVyaXZlZC9hLTAxLnBuZw,b_bXktYnVja2V0
references/image_process_reference.md