Install
openclaw skills install qiniu-kodo-qshell使用七牛云 Kodo 与 qshell 执行对象存储操作,包含下载 qshell、配置账号、查询 bucket、上传文件、下载文件。适用于用户提到七牛云、七牛 Kodo、qshell、对象存储上传下载、AK/SK、bucket、key、文件中转、把文件上传到七牛或从七牛下载到本地的场景。
openclaw skills install qiniu-kodo-qshell用于通过 qshell 操作七牛云对象存储(Kodo)。
当用户要你:
qshell虽然可以直接调 Kodo API,但下载对象内容时,实际链路比较绕。对于真实工作,qshell 更稳。
实测可用的 Linux amd64 下载地址:
https://kodo-toolbox-new.qiniu.com/qshell-v2.18.0-linux-amd64.tar.gz?ref=developer.qiniu.com&s_path=%2Fkodo%2F1302%2Fqshell
注意:
ref=developer.qiniu.coms_path=%2Fkodo%2F1302%2Fqshells_path 的 / 必须保留为 URL 编码后的 %2F实测直接裸 curl 可能拿到 403 Forbidden,以下方式可用:
curl -L \
-H "Referer: https://developer.qiniu.com/kodo/1302/qshell" \
-H "User-Agent: Mozilla/5.0" \
"https://kodo-toolbox-new.qiniu.com/qshell-v2.18.0-linux-amd64.tar.gz?ref=developer.qiniu.com&s_path=%2Fkodo%2F1302%2Fqshell" \
-o qshell.tar.gz
qshell account 配置 AK / SKqshell user cu 切换到目标账号mkbucketfput,大文件优先用 rputdeleteget;如需批量或按 key 列表下载,用 qdownload2 + --key-filecurl -L \
-H "Referer: https://developer.qiniu.com/kodo/1302/qshell" \
-H "User-Agent: Mozilla/5.0" \
"https://kodo-toolbox-new.qiniu.com/qshell-v2.18.0-linux-amd64.tar.gz?ref=developer.qiniu.com&s_path=%2Fkodo%2F1302%2Fqshell" \
-o qshell-v2.18.0-linux-amd64.tar.gz
tar -xzf qshell-v2.18.0-linux-amd64.tar.gz
chmod +x qshell
./qshell -v
如果用户已经把压缩包放到本地,例如:
/home/xa/qshell-v2.18.0-linux-amd64.tar
则直接:
tar -xf /home/xa/qshell-v2.18.0-linux-amd64.tar -C ./tmp/bin
chmod +x ./tmp/bin/qshell
./tmp/bin/qshell -v
优先要求:AK / SK 配置在 ~/.openclaw/openclaw.json 中,不要在 skill 文件、脚本或最终回复里硬编码。
建议使用如下结构:
{
"skills": {
"entries": {
"qiniu-kodo-qshell": {
"enabled": true,
"env": {
"QINIU_ACCESS_KEY": "your-ak",
"QINIU_SECRET_KEY": "your-sk"
}
}
}
}
}
运行时从环境变量读取:
QINIU_ACCESS_KEYQINIU_SECRET_KEY只有在用户明确要求临时测试、且当前环境没有配置可读时,才临时通过命令参数传入。完成任务后,不要在回复中回显密钥。
若必须手动配置 qshell,可使用:
./qshell account <AK> <SK> <account_name>
./qshell user cu <account_name>
注意:
account_name 不能和本地已存在名称冲突,否则会报已存在例如:
ACC="tempacct_$(date +%s)"
./qshell account "$AK" "$SK" "$ACC"
./qshell user cu "$ACC"
./qshell stat <bucket> <key>
mkbucket 用来创建新的空间。
./qshell mkbucket <bucket> [--region <region>] [--private]
参数:
<bucket>:空间名,必填--region:区域,常见值:z0(华东)、z1(华北)、z2(华南)、na0(北美)、as0(东南亚)--private:创建私有空间;不带时默认创建公有空间示例:
./qshell mkbucket my-bucket --region z1 --private
建议:
z0fput:中小文件上传fput 以 multipart/form-data 方式上传,适合中小文件。文档明确建议:一般文件大小超过 100MB 时,优先改用分片上传。
./qshell fput <bucket> <key> <local_file>
示例:
./qshell fput c2ol-fqx test.txt ./hello.txt
常用可选参数:
--overwrite:覆盖已有对象--mimetype <type>:指定 MimeType--file-type <n>:指定存储类型--accelerate:启用上传加速rput:大文件/分片上传rput 适合大文件,默认走分片上传 API V2,更稳。
./qshell rput <bucket> <key> <local_file>
示例:
./qshell rput c2ol-fqx big/video.mp4 ./video.mp4
常用可选参数:
--overwrite:覆盖已有对象--mimetype <type>:指定 MimeType--file-type <n>:指定存储类型--resumable-api-v2=false:改用 V1 分片接口--resumable-api-v2-part-size <bytes>:设置 V2 分片大小--accelerate:启用上传加速选择建议:
fputrputfputdelete 用来从空间中删除一个文件。
./qshell delete <bucket> <key>
示例:
./qshell delete c2ol-fqx old.txt
注意:
get:单文件下载优先选项官方文档里,get 就是下载指定文件的直接命令。
./qshell get <bucket> <key> [-o <outfile>]
示例:
./qshell get qiniutest test.txt
./qshell get qiniutest test.txt -o /tmp/test.txt
说明:
-o/--outfile:指定本地保存路径--domain:指定下载域名;不指定时,qshell 会按自身优先级选 bucket 绑定域名或源站域名--check-size / --check-hash:下载后校验一致性--enable-slice:大文件时启用切片下载建议:
getqdownload2qdownload2:批量/按 key 列表下载qdownload2 没有 --key 参数。下载单文件时,如必须使用它,也要通过 --key-file 提供 key 列表。
先创建一个只包含目标 key 的文件:
printf "comstudy.ino\n" > keys.txt
然后下载:
./qshell qdownload2 --bucket=c2ol-fqx --key-file=keys.txt --dest-dir=./download
TS=$(date +%s)
cp ./download/comstudy.ino ./tmp/${TS}_comstudy.ino
set -e
QSH=./tmp/bin/qshell
BUCKET="c2ol-fqx"
KEY="comstudy.ino"
TS=$(date +%s)
mkdir -p ./tmp/qdl
printf "%s\n" "$KEY" > ./tmp/keys.txt
$QSH qdownload2 --bucket="$BUCKET" --key-file=./tmp/keys.txt --dest-dir=./tmp/qdl
FOUND=$(find ./tmp/qdl -type f -name "$KEY" | head -n 1)
cp "$FOUND" "./tmp/${TS}_comstudy.ino"
set -e
QSH=./tmp/bin/qshell
BUCKET="c2ol-fqx"
LOCAL="./tmp/example.txt"
REMOTE="example.txt"
$QSH fput "$BUCKET" "$REMOTE" "$LOCAL"
scripts/get_with_qshell.sh单文件下载脚本,封装:
./qshell get <bucket> <key> -o <outfile>
用法:
bash scripts/get_with_qshell.sh <qshell_path> <bucket> <remote_key> <outfile>
scripts/upload_with_qshell.sh上传脚本,按文件大小自动选择 fput 或 rput:
104857600 字节(100MB)fputrput可通过环境变量覆盖阈值:
QINIU_RPUT_THRESHOLD_BYTES=52428800 bash scripts/upload_with_qshell.sh ...
用法:
bash scripts/upload_with_qshell.sh <qshell_path> <bucket> <remote_key> <local_file>
scripts/delete_with_qshell.sh单对象删除脚本,封装:
./qshell delete <bucket> <key>
用法:
bash scripts/delete_with_qshell.sh <qshell_path> <bucket> <remote_key>
scripts/create_bucket_with_qshell.sh创建空间脚本,封装:
./qshell mkbucket <bucket> --region <region> [--private]
用法:
bash scripts/create_bucket_with_qshell.sh <qshell_path> <bucket> <region> [--private]
当用户要做这种链路时:
pptx/pdf/docx/xlsx推荐组合:
convert-document-to-markdown 将文件转为 Markdown.md 上传回 bucketconvert-document-to-markdown 依赖 Docker。若当前会话没有 Docker socket 权限,会报:
permission denied while trying to connect to the docker API at unix:///var/run/docker.sock
这通常说明:
docker 组里,或docker 组权限最小诊断思路:
id
ls -l /var/run/docker.sock
docker version
当 id 能看到 docker 组,并且 docker version 可用后,再重试 convert-document-to-markdown。
以下链路已在真实环境跑通:
c2ol-fqx 下载 PPTconvert-document-to-markdown 成功转换为 Markdownc2ol-fqx以下流程已在真实环境里跑通:
qshell fput 上传测试文件到 bucketqshell qdownload2 --key-file=... 下载单文件comstudy.ino 下载到本地并重命名为带时间戳文件--key错误示例:
./qshell qdownload2 --bucket=c2ol-fqx --key=comstudy.ino --dest-dir=tmp/qdl
会报:
unknown flag: --key
正确方式:
printf "comstudy.ino\n" > keys.txt
./qshell qdownload2 --bucket=c2ol-fqx --key-file=keys.txt --dest-dir=tmp/qdl
不要把下载地址简化成不带 query 的裸 URL。
qshell account ... tempacct 如果已经存在,会失败。优先使用唯一账号名。
完成操作后,回复至少包含: