{"skill":{"slug":"file-upload-test","displayName":"文件上传","summary":"上传文件到内部 BS3 存储（免签名）。Use when user asks to upload files, images, documents to storage, or get a shareable URL for a file.","description":"---\nname: file-upload\ndescription: 上传文件到内部 BS3 存储（免签名）。Use when user asks to upload files, images, documents to storage, or get a shareable URL for a file.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📤\",\n        \"requires\": { \"bins\": [\"python3\"], \"pip\": [\"boto3\", \"botocore\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"pip\",\n              \"kind\": \"pip\",\n              \"packages\": [\"boto3\", \"botocore\"],\n              \"label\": \"Install boto3 and botocore via pip\",\n            },\n          ],\n      },\n  }\n---\n\n# File Upload Skill\n\n上传文件到内部 BS3 存储，生成可分享的文件 URL。\n\n---\n\n## 🔐 前置条件\n\n### 1. 安装依赖\n\n```bash\npip3 install boto3 botocore\n```\n\n### 2. 网络要求\n\n- **内网访问**: 需要在内网环境使用\n- **Endpoint**: `http://bs3-hb1.internal`\n- **免签名**: 无需配置 AWS credentials\n\n---\n\n## 📦 功能说明\n\n### 支持的操作\n\n| 操作 | 说明 | 输入 | 输出 |\n|------|------|------|------|\n| `upload_file` | 上传本地文件 | 文件路径 | 文件 URL |\n| `upload_bytes` | 上传二进制数据 | 文件名 + 数据 | 文件 URL |\n\n### 特性\n\n- ✅ **自动去重**: 上传文件名自动添加 8 位 UUID 前缀，防止重名覆盖\n- ✅ **免签名**: 内网免认证，直接上传\n- ✅ **固定 Bucket**: `kkim-mario-claw`\n- ✅ **CDN 加速**: 返回 `bs3-hb1.corp.tencent.com` 域名 URL\n\n---\n\n## 🚀 使用方法\n\n### 命令行方式\n\n```bash\n# 上传文件\npython3 ~/.openclaw/workspace/skills/file-upload/upload.py upload_file /path/to/file.png\n\n# 输出示例\nhttps://bs3-hb1.corp.tencent.com/kim-mario-claw/abc12345_file.png\n```\n\n### Python API 方式\n\n```python\nfrom upload import upload_file, upload_bytes\n\n# 上传文件\nurl = upload_file(\"my-image.png\", \"/path/to/file.png\")\nprint(url)\n\n# 上传二进制数据\nwith open(\"/path/to/file.png\", \"rb\") as f:\n    data = f.read()\nurl = upload_bytes(\"my-image.png\", data)\nprint(url)\n```\n\n---\n\n## 📋 使用场景\n\n### 场景 1: 上传图片\n\n**用户说:**\n- \"帮我上传这张图片\"\n- \"把这个文件传到 BS3\"\n- \"生成一个图片的分享链接\"\n\n**处理流程:**\n1. 获取文件路径\n2. 调用 `upload_file`\n3. 返回 URL\n\n### 场景 2: 上传文档\n\n**用户说:**\n- \"上传这个 PDF 文件\"\n- \"把报告传到存储\"\n\n**处理流程:**\n1. 获取文件路径\n2. 调用 `upload_file`\n3. 返回 URL\n\n### 场景 3: 上传二进制数据\n\n**用户说:**\n- \"保存这段数据\"\n- \"上传这个截图\"\n\n**处理流程:**\n1. 获取二进制数据\n2. 调用 `upload_bytes`\n3. 返回 URL\n\n---\n\n## 📁 文件结构\n\n```\n~/.openclaw/workspace/skills/file-upload/\n├── SKILL.md          # 技能文档\n├── upload.py         # Python 脚本\n└── .env              # 可选配置（如需要）\n```\n\n---\n\n## ⚠️ 注意事项\n\n### 1. 内网限制\n\n- 只能在内网使用\n- Endpoint: `http://bs3-hb1.internal`\n- 外网无法访问\n\n### 2. Bucket 说明\n\n- **Bucket**: `kkim-mario-claw`\n- **用途**: 临时存储，非永久保存\n- **建议**: 重要文件请备份到其他存储\n\n### 3. 文件名处理\n\n- 自动添加 8 位 UUID 前缀\n- 示例：`file.png` → `a1b2c3d4_file.png`\n- 目的：防止同名文件覆盖\n\n### 4. 返回 URL 格式\n\n```\nhttps://bs3-hb1.corp.tencent.com/kim-mario-claw/{uuid}_{filename}\n```\n\n### 5. 有效期\n\n- **链接有效期：7 天**\n- 超时后文件可能无法访问\n- 重要文件请及时下载保存\n\n\n## 📞 常见问题\n\n### Q: 上传失败怎么办？\n\n**检查项:**\n1. ✅ 是否在内网\n2. ✅ 是否安装了 `boto3` 和 `botocore`\n3. ✅ 文件路径是否正确\n4. ✅ 网络是否能访问 `bs3-hb1.internal`\n\n### Q: 如何验证上传成功？\n\n访问返回的 URL，能正常下载/查看即成功。\n\n### Q: 文件会永久保存吗？\n\nBucket 名称包含 `temp`，建议作为临时存储，重要文件请备份。\n\n---\n\n*Last updated: 2026-03-07*\n","tags":{"latest":"1.0.1"},"stats":{"comments":0,"downloads":786,"installsAllTime":29,"installsCurrent":0,"stars":0,"versions":2},"createdAt":1773309108948,"updatedAt":1778998366401},"latestVersion":{"version":"1.0.1","createdAt":1773309661232,"changelog":"- 修改描述：将“快手内部”改为“内部”\n- Endpoint 和内网使用说明中，去除了对“快手”的专有说明，改为通用“内网”\n- 返回的 CDN 域名由 bs3-hb1.corp.kuaishou.com 更新为 bs3-hb1.corp.tencent.com\n- 其余功能及用法保持不变","license":"MIT-0"},"metadata":{"setup":[],"os":null,"systems":null},"owner":{"handle":"bagayalu","userId":"s177dk43mhd79fjqd7bdyw9yzx884037","displayName":"bagayalu","image":"https://avatars.githubusercontent.com/u/7814975?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089852371}}