UI はローカライズ済みです。スキルの紹介と説明文書は選択した言語へ AI が自動翻訳し、コード・コマンド・パス・専門用語は原文のままです。原作者の文書が優先されます。
スキルを探す
運用・デプロイ · SKILL.md

upload-cdn

upload-cdn

上传本地文件到 S3 兼容对象存储(Cloudflare R2 等),返回公开访问 URL。当用户要上传图片/文件到 CDN、获取外链时使用。

Independent GitHub snapshot · Automated classification · Original documentation governs

スキルの説明

GitHub

name: upload-cdn version: 1.0.0 trigger: "上传CDN|上传图床|upload cdn|上传到CDN|上传文件到云|获取外链|公开链接|图片外链" description: "上传本地文件到 S3 兼容对象存储(Cloudflare R2 等),返回公开访问 URL。当用户要上传图片/文件到 CDN、获取外链时使用。"

upload-cdn

上传本地文件到 S3 兼容对象存储,返回公开 URL。支持 Cloudflare R2 及任意 S3 兼容服务。

密钥配置

凭证存放在 ~/.ethan/.secrets/upload-cdn.env,由 shell 工具自动注入,不要在对话中回显明文值。

第 0 步:先用 list_secrets 检查凭证是否已存。

  • 若输出包含 upload-cdn.env → 已配置,直接跳到「使用方法」。
  • 若没有 → 立即停止,不要再 find / read config 探索——凭证就是没有。直接告知用户需要提供以下字段(不要绕圈子):

第 1 步(凭证不存在时):检测 shell 注入是否生效(可选快速确认):

test -n "$CDN_ENDPOINT" && test -n "$CDN_ACCESS_KEY" && test -n "$CDN_SECRET_KEY" \
  && test -n "$CDN_BUCKET" && test -n "$CDN_PUBLIC_URL" && echo READY || echo MISSING
  • READY → 继续。
  • MISSING → 凭证缺失。直接向用户索要以下字段,不要再探索其他路径:
字段说明示例
CDN_ENDPOINTS3 endpoint URLhttps://<account_id>.r2.cloudflarestorage.com
CDN_ACCESS_KEYAccess Key IDR2 → 管理 API 令牌 → 创建令牌
CDN_SECRET_KEYSecret Access Key同上
CDN_BUCKET存储桶名my-assets
CDN_PUBLIC_URL公开访问 URL 前缀https://cdn.example.com 或 R2 公开域名
CDN_REGION区域(可选)R2 填 auto,其他填对应 region(默认 auto)

拿到后由 agent 写入(file_write 工具,path=~/.ethan/.secrets/upload-cdn.env):

CDN_ENDPOINT="https://<account_id>.r2.cloudflarestorage.com"
CDN_ACCESS_KEY="<access_key_id>"
CDN_SECRET_KEY="<secret_access_key>"
CDN_BUCKET="<bucket_name>"
CDN_PUBLIC_URL="https://cdn.example.com"
CDN_REGION="auto"

写完执行 chmod 600 ~/.ethan/.secrets/upload-cdn.env,然后重新执行原始请求。

使用方法

规则:所有上传统一使用 ethan/upload/ 路径前缀,不要用裸文件名作为 key。

上传图片/文件:

python ~/.ethan/skills/upload-cdn/scripts/upload_cdn.py /path/to/file.png "ethan/upload/$(basename /path/to/file.png)"

批量上传(shell 循环):

for f in /tmp/imgs/*.png; do
  python ~/.ethan/skills/upload-cdn/scripts/upload_cdn.py "$f" "docs/$(basename "$f")"
done

成功时 stdout 输出公开 URL,失败时 stderr 输出错误并 exit 非0。

注意事项

  • Object key 建议带路径前缀(如 docs/2024/image.png),避免与其他文件冲突
  • 同名 key 会覆盖已有文件
  • 脚本纯标准库实现,无需额外依赖
保存したスキル