使用GitHub API添加文件时遇cURL参数列表过长问题求解决办法
解决Bash脚本中cURL调用GitHub API上传大文件时“参数列表过长”的问题
问题根源是直接将Base64编码后的大文件内容作为cURL命令行参数传递,超出了Bash的命令行参数长度限制。以下是两种可行的解决方案:
方案一:使用临时文件构造请求体
- 对目标PDF文件进行Base64编码(禁用换行符,符合GitHub API要求),保存到临时文件:
base64 -w 0 your_file.pdf > encoded_content.txt
- 用
jq构造包含编码内容的JSON请求体(通过文件读取内容,避免命令行参数过长):
jq -n \ --arg path "repo/path/to/your/file.pdf" \ --arg message "Add PDF file" \ --rawfile content encoded_content.txt \ '{path: $path, message: $message, content: $content}' > request_body.json
- 用cURL读取请求体文件发送PUT请求:
curl -X PUT \ -H "Authorization: token YOUR_GITHUB_TOKEN" \ -H "Accept: application/vnd.github+json" \ https://api.github.com/repos/OWNER/REPO/contents/repo/path/to/your/file.pdf \ --data @request_body.json
方案二:管道流式处理(无临时文件)
直接通过管道串联Base64编码、请求体构造和cURL请求,全程避免将大内容写入命令行参数:
base64 -w 0 your_file.pdf | jq -n \ --arg path "repo/path/to/your/file.pdf" \ --arg message "Add PDF file" \ --rawfile content /dev/stdin \ '{path: $path, message: $message, content: $content}' | curl -X PUT \ -H "Authorization: token YOUR_GITHUB_TOKEN" \ -H "Accept: application/vnd.github+json" \ https://api.github.com/repos/OWNER/REPO/contents/repo/path/to/your/file.pdf \ --data @-
注意事项
- 替换命令中的
YOUR_GITHUB_TOKEN、OWNER、REPO以及文件路径为实际值 - GitHub Contents API单文件最大支持100MB,若你的PDF超出此限制,需改用Git LFS上传
内容的提问来源于stack exchange,提问作者ttpats967
相关产品推荐
相关产品推荐

