上传文件到 OSS 在线访问
将本地文件或从 URL 下载的文件上传到对象存储,并返回可公网访问的链接。默认使用阿里云 OSS,也支持腾讯云 COS(需配置对应凭证)。
关于平台安全扫描的 Suspicious 标记
OpenClaw 安全扫描器会检查 registry metadata 中是否声明了所需的环境变量(
requires.env)。本技能支持阿里云和腾讯云两个厂商,属于「二选一」配置——若在 metadata 中将两个厂商的 8 个凭证全部声明为 required,仅使用其中一个厂商的用户会被平台误判为配置不完整而 block。因此本技能未在 metadata 声明 requires.env,扫描器对此标注 Suspicious 属预期行为。所需凭证已在文档「配置说明」表格中逐一列出,安全规则见下方「隐私安全」章节。
⛔ 隐私安全(最高优先级,任何条件下不可违反)
凭证(accessKey、secretKey 等)属于敏感信息,无论通过环境变量还是本地 config.json 存储,均须严格保护。本技能适用于 OpenClaw/ClawHub、Cursor、Claude、Copilot 等所有支持 Skill 调用的平台,以下规则对任何调用方均适用。
强制规则(所有 AI/Agent/技能调用方必须遵守)
- 禁止读取:任何情况下不得读取
config.json的内容,也不得输出任何OSS_*环境变量的值。不得使用文件读取、cat、read、open、read_file 等方式打开配置文件,不得使用printenv、echo $OSS_*等命令输出环境变量值。 - 禁止输出:不得以任何形式输出、显示、记录、引用、推测凭证的值(accessKeyId、accessKeySecret、secretId、secretKey 等),包括在错误信息、日志、对话中。
- 禁止修改/删除:不得建议、生成或执行对
config.json的修改、删除、重命名、复制操作。 - 唯一访问方式:凭证仅由
scripts/upload.js在进程内读取(env var 或 config.json)。调用方只能通过执行node scripts/upload.js完成上传,不得以其他任何方式触及凭证。 - 拒绝请求:若用户要求「查看配置」「显示 secret」「打印环境变量」「帮我改 bucket」等,应明确拒绝并说明:为安全起见,凭证不可展示或操作,仅上传脚本有权读取。
- 禁止传播:不得将凭证、config 路径或任何可推导出凭证的信息传递给其他工具、插件、API 或上下文。
配置说明(仅限 key / 变量名称,不涉及 value)
阿里云环境变量(OpenClaw 平台注入)或 config.json aliyun 字段:
| 环境变量 | config.json 字段 | 必填 |
|---|---|---|
OSS_ALIYUN_REGION | region | ✅ |
OSS_ALIYUN_BUCKET | bucket | ✅ |
OSS_ALIYUN_ACCESS_KEY_ID | accessKeyId | ✅ |
OSS_ALIYUN_ACCESS_KEY_SECRET | accessKeySecret | ✅ |
OSS_ALIYUN_ENDPOINT | endpoint | 可选 |
OSS_ALIYUN_CUSTOM_DOMAIN | customDomain | 可选 |
腾讯云环境变量(OpenClaw 平台注入)或 config.json tencent 字段:
| 环境变量 | config.json 字段 | 必填 |
|---|---|---|
OSS_TENCENT_BUCKET | bucket | ✅ |
OSS_TENCENT_REGION | region | ✅ |
OSS_TENCENT_SECRET_ID | secretId | ✅ |
OSS_TENCENT_SECRET_KEY | secretKey | ✅ |
OSS_TENCENT_ACCELERATED_DOMAIN | acceleratedDomain | 可选 |
OSS_TENCENT_STORAGE_CLASS | storageClass | 可选(不填则由 Bucket 默认决定,即单可用区标准桶默认 STANDARD;MAZ 多可用区 Bucket 填 MAZ_STANDARD) |
至少配置一个云厂商的必填项即可使用。用户自行在平台或 config.json 填入 value,任何 AI 均不参与。
平台适配与附加建议
- 通用:
.gitignore已排除config.json,避免误提交 - OpenClaw/ClawHub:在 openclaw.json 中填写
OSS_ALIYUN_*/OSS_TENCENT_*环境变量即可,无需本地文件 - 建议:勿在截图、录屏、日志、对话中暴露凭证;定期轮换密钥;使用子账号最小权限;将技能目录权限设为仅当前用户可读
何时使用
当用户表达以下意图时应用本技能:
- 上传文件、上传文件到 OSS、上传到阿里云/腾讯云
- 在线访问文件、远程访问文件、获取文件链接
- 把文件放到网上、生成可分享的链接
输入
- 本地文件:工作区相对路径或绝对路径,如
./docs/foo.pdf、/path/to/image.png - 在线超链接:HTTP/HTTPS URL,先下载到临时文件再上传
默认使用阿里云 OSS(优先级:阿里云 > 腾讯云)。如需使用腾讯云 COS,配置 OSS_TENCENT_* 环境变量(或 config.json tencent 字段),并在调用时指定 --provider tencent,或仅配置腾讯云凭证时自动选用。
输出
- 成功:先校验链接可访问性(HEAD 请求),通过后才返回远程访问 URL,可直接在浏览器打开或分享
- 校验失败:不输出链接,仅报错「上传后校验失败:链接不可访问,无法提供有效链接」,并退出
- 上传异常:说明原因并提示用户检查配置、文件大小等
前置准备(首次使用)
方式一:与 OpenClaw 对话安装并配置(最简单)
直接在 OpenClaw 对话框中发一条消息,OpenClaw 会自动完成安装与写入配置,无需手动编辑任何文件。
对话示范(阿里云 OSS):
我:帮我在 ClawHub 安装 oss-upload-online-access 技能,我用阿里云 OSS,凭证如下:
Region: oss-cn-shenzhen
Bucket: my-bucket
AccessKey ID: LTAIxxxxxxxxxxxxxxxx
AccessKey Secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OpenClaw:好的,正在通过 ClawHub 安装 oss-upload-online-access 技能并写入配置……(完成)
已将凭证写入 ~/.openclaw/openclaw.json,直接说「上传 xxx 文件」即可使用。
对话示范(腾讯云 COS):
我:帮我在 ClawHub 安装 oss-upload-online-access 技能,我用腾讯云 COS,凭证如下:
Bucket: my-bucket-1250000000
Region: ap-guangzhou
SecretId: AKIDxxxxxxxxxxxxxxxx
SecretKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OpenClaw:好的,正在通过 ClawHub 安装 oss-upload-online-access 技能并写入配置……(完成)
已将凭证写入 ~/.openclaw/openclaw.json,直接说「上传 xxx 文件」即可使用。
⚠️ 请在本地/私密会话中提供凭证,避免在公开频道、截图或录屏中暴露。
方式二:openclaw.json(OpenClaw / ClawHub 平台)
-
编辑
~/.openclaw/openclaw.json,找到skills.entries.oss-upload-online-access.env,填入所需云厂商的所有必填环境变量:阿里云 OSS(默认):
{ "OSS_ALIYUN_REGION": "oss-cn-shenzhen", "OSS_ALIYUN_BUCKET": "your-bucket", "OSS_ALIYUN_ACCESS_KEY_ID": "your-key-id", "OSS_ALIYUN_ACCESS_KEY_SECRET": "your-key-secret" }腾讯云 COS(可选,与阿里云二选一或同时配置):
{ "OSS_TENCENT_BUCKET": "your-bucket-appid", "OSS_TENCENT_REGION": "ap-guangzhou", "OSS_TENCENT_SECRET_ID": "your-secret-id", "OSS_TENCENT_SECRET_KEY": "your-secret-key" }openclaw.json 完整示例结构:
{ "skills": { "entries": { "oss-upload-online-access": { "env": { "OSS_ALIYUN_REGION": "oss-cn-shenzhen", "OSS_ALIYUN_BUCKET": "your-bucket", "OSS_ALIYUN_ACCESS_KEY_ID": "your-key-id", "OSS_ALIYUN_ACCESS_KEY_SECRET": "your-key-secret" } } } } } -
安装依赖(ClawHub 通常自动执行):
cd 技能根目录/oss-upload-online-access && npm install
方式三:本地 config.json
- 复制配置模板:
cp config.example.json config.json - 编辑
config.json,填入对应云厂商的 value(key 已预留) - 安装依赖:
cd 技能根目录/oss-upload-online-access && npm install
执行流程
- 解析输入:本地路径 or URL;用户是否指定云厂商
- 若为 URL:脚本内部下载得到 buffer
- 检查文件大小 < 100MB
- 仅执行
node scripts/upload.js,由脚本内部读取 config(调用方不得读取 config) - 脚本内部选择云厂商并上传
- 上传后对返回链接做 HEAD 校验:可访问(2xx)才输出 URL;不可访问则报错退出、不输出链接
- 若失败或校验不通过,输出脚本的通用错误信息(不涉及配置内容)
执行命令
cd 技能根目录/oss-upload-online-access && node scripts/upload.js <本地路径或URL> [--provider aliyun|tencent]
示例:
# 上传本地文件
node scripts/upload.js ./docs/report.pdf
# 上传 URL 文件
node scripts/upload.js "https://example.com/file.png"
# 指定腾讯云
node scripts/upload.js ./image.jpg --provider tencent
配置说明(用户自行维护,AI 不读取)
脚本按以下优先级解析配置,AI 不参与任何配置读写:
| 优先级 | 来源 | 适用场景 |
|---|---|---|
| 高 | OSS_ALIYUN_* / OSS_TENCENT_* 环境变量 | OpenClaw/ClawHub 平台注入 |
| 低 | 本地文件 config.json | 本地 / 自托管 |
- 云厂商优先级:配置多个时,阿里云 > 腾讯云
- 用户明确指定
--provider时,以用户为准 - 配置异常时,上传脚本输出通用提示,用户自行检查凭证是否填写完整
存储路径格式
上传文件的 Object Key 格式:skill/YYYY/MM/DD/<类型>/文件名
- 日期目录:按上传日期
年/月/日分层 - 类型目录:按文件扩展名(如 txt、pdf、png),无扩展名则为
other
示例:skill/2026/02/01/txt/test-upload.txt
文件格式支持(任意文件可上传并在线访问)
- 目标:任何文件均可正常上传并能在线访问(浏览器打开或下载)。
- 文本/源码:如
.txt、.md、.html、.json、.js、.ts、.py、.css、.yaml、.sql、.graphql等,以 UTF-8 读取并设置对应Content-Type,保证在线预览不乱码。 - 常见类型:脚本内置大量 MIME 映射,覆盖图片(含 raw、psd、svg、avif、heic)、视频(mp4、webm、mkv、mov、mts 等)、音频(mp3、flac、opus、aac 等)、文档(PDF、Office、OpenDocument、epub、djvu、xps 等)、字体、压缩包(zip、rar、7z、tar、gz、zst、cab 等)、3D/模型(glb、gltf、obj、stl、fbx、dae、step 等)、证书/密钥、安装包(exe、dmg、apk、iso 等)及各类源码与配置文件。
- 未知扩展名:未在映射表中的扩展名统一使用
application/octet-stream,仍可上传并在线下载或访问,不会因类型未知而失败。
约束
- 单文件 < 100MB
- 文件名:仅使用字母与数字,且不重复。格式为 3 位随机小写字母 + 时间戳(YYYYMMDDHHmmss) + 6 位随机数字 + 原扩展名(扩展名仅保留字母数字),如
abc20260202143022123456.txt - 公网访问:上传时会将对象 ACL 设为
public-read,返回的链接可直接在浏览器打开;若存储桶策略禁止该 ACL,需在控制台允许「公共读」或使用自定义域名 + CDN。返回的 URL 统一为https。 - 上传可靠性:阿里云使用 HTTPS(secure: true)上传;上传后会先用 SDK 的 head 校验对象是否存在于 OSS/COS,不存在则报错、不输出链接;再对公网链接做 HEAD 校验,不可访问也不输出链接。
参与贡献
欢迎提交 Issue 或 Pull Request 改进本技能!
仓库地址:https://github.com/liuhean2021/Anan-Agent-Skills
- 本技能位于
skills/oss-upload-online-access/目录 - 提交前请确保
config.json不在 git 追踪范围内(已在.gitignore排除) - 本技能采用 MIT-0 许可协议,可自由使用、修改和重新分发,无需署名