腾讯云 COS 自动上传
概述
将用户指定的本地文件上传到腾讯云对象存储(COS)的固定路径前缀 offline_update/ 下。桶、区域、前缀与密钥均内置在技能的 references/cos_credentials.json 中,同事安装技能后即可直接使用,无需任何额外配置、无需设置环境变量。密钥在脚本运行全程脱敏,绝不输出明文。
何时使用
- 用户说「上传这份文件」「上传这个文件」「帮我上传到 COS」「上传这个文档」等,并附带一个文件路径或文件引用(如
@file)。 - 用户希望把某个文档 / 表格推送到 COS 的固定目录(
offline_update/)下。
上传流程
- 确认文件:从用户消息中取得待上传文件的绝对路径(用户以
@file引用时,取其实际本地路径;若只是相对路径或工作区路径,先解析为绝对路径)。 - 执行上传:运行打包脚本
scripts/upload.py,传入文件路径:
bash
"C:/Users/Administrator/.workbuddy/binaries/python/envs/default/Scripts/python.exe" \
"<技能目录>/scripts/upload.py" "<待上传文件的绝对路径>"
脚本会:
- 自动读取内置配置 references/cos_credentials.json(桶、区域、前缀、密钥)。
- 将文件上传到 offline_update/<文件名>(仅允许落在该目录下,路径被锁定,无法更改)。
- 自动通过清华镜像安装缺失的 cos-python-sdk-v5 依赖。
- 输出桶、区域、前缀、脱敏后的 SecretId,以及最终访问地址。SecretKey 永远不输出。
3. 回执:把上传结果(对象键、访问地址)告诉用户。对象键与访问地址不包含任何密钥,可直接展示。
安全与合规(必须遵守)
- 密钥仅随包内部分发:SecretId / SecretKey 保存在技能内置文件
references/cos_credentials.json中,仅通过内部技能市场分发给受信任同事。不得将该文件单独外发、不得提交到公开仓库、不得在聊天或日志中打印明文。 - 不输出明文密钥:任何情况下都不得把 SecretKey / SecretId 的完整明文写入回复、日志或文件。脚本已内置脱敏(SecretId 仅显示前 4 位,SecretKey 显示为
***(已脱敏)),并会在异常信息中自动抹掉密钥明文。 - 仅上传到固定路径:目标对象键强制以
offline_update/开头,不允许上传到桶的其他位置,不允许修改桶、区域或路径。脚本不接受任何改路径的参数。 - 不做额外操作:本技能只做「上传文件」,不删除、不覆盖其他对象、不修改配置。
- 建议(降低泄露影响面):当前为账号主密钥,若技能包外泄影响面较大。条件允许时,建议在腾讯云 CAM 新建一个仅允许
PutObject到offline_update/*的子账号密钥,替换references/cos_credentials.json中的值。
故障排查
- 缺少密钥:确认技能目录下的
references/cos_credentials.json未被误删;或临时用环境变量COS_SECRET_ID/COS_SECRET_KEY覆盖。 - 依赖缺失:脚本会自动通过清华镜像
pip install cos-python-sdk-v5。 - 文件不存在:检查用户提供的路径是否正确、是否为绝对路径。
- 网络 / 权限错误:脚本会输出脱敏后的错误信息;若提示无权限,多为密钥无该桶写入权限或桶名 / 区域错误。