如何使用GitHub CLI下载其他仓库工件并保存为正常Zip文件?
解决gh api下载GitHub工件时Zip文件损坏的问题
直接用gh api命令重定向生成Zip文件损坏的核心原因是:gh api默认会将响应内容当作文本处理,甚至会额外输出HTTP响应头元数据,这些冗余内容混入二进制文件后,直接破坏了Zip的结构。
下面是两种靠谱的解决方法:
方法一:使用--raw参数输出原始二进制内容
--raw参数会让gh api跳过文本解析,直接输出服务器返回的原始二进制响应体,这样重定向保存的文件就是完整可用的Zip包:
gh api /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/zip --raw > artifact.zip
替换命令里的{owner}、{repo}、{artifact_id}为你实际的仓库所有者、仓库名和工件ID即可。
方法二:指定Accept请求头配合--raw
如果需要明确告诉服务器返回二进制Zip格式,可以添加Accept请求头,再结合--raw参数:
gh api -H "Accept: application/zip" /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/zip --raw > artifact.zip
更简便的替代方案:用gh run download
其实GitHub CLI提供了专门的工件下载命令gh run download,如果你的工件属于某个特定的工作流运行,用这个命令更省心,不需要手动拼接API路径:
gh run download {run_id} --name {artifact_name} -D ./download_dir
这个命令会自动处理二进制文件的保存,不会出现损坏问题。
内容的提问来源于stack exchange,提问作者dododo
相关产品推荐
相关产品推荐

