如何使用cURL将本地文件正确上传至GitHub仓库?
cURL上传本地文件到GitHub仓库的正确写法
你的现有命令存在3处语法错误,修正后即可支持docx、jpeg等任意格式文件的上传,本地文件路径直接填写系统可识别的绝对/相对路径即可。
现有命令的错误点
openssl base64读取文件的参数为-in,你写的in属于参数错误;$/temp/hello.txt路径格式非法,直接替换为本地真实路径即可,比如Linux/macOS下的/tmp/hello.jpeg、Windows下的C:\Users\xxx\demo.docx、当前执行目录下的./test.png都可识别。- GitHub Contents API要求
content字段为base64编码后的字符串,你给该字段值额外包裹了一层{},不符合接口格式要求。 - Shell中单引号包裹的内容不会执行
$(...)命令替换逻辑,会直接把命令字符串作为参数传递,导致无法读取到文件的base64编码结果。
修正后可直接运行的命令(Linux/macOS)
# 按需修改以下配置项 LOCAL_FILE_PATH="/temp/hello.txt" # 本地待上传文件的真实路径,支持任意格式 REMOTE_FILE_PATH="hello.txt" # 文件上传到仓库后的存储路径,支持子目录如"docs/demo.docx" COMMIT_MESSAGE="Upload this file to Git" COMMITTER_NAME="Bon" COMMITTER_EMAIL="bon@bon.com" GITHUB_TOKEN="<替换为你的GitHub个人访问令牌>" TARGET_REPO="BT23/demo-repo" curl -X PUT \ -H "Accept: application/vnd.github+json" \ -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/$TARGET_REPO/contents/$REMOTE_FILE_PATH" \ -d "{ \"message\":\"$COMMIT_MESSAGE\", \"committer\":{\"name\":\"$COMMITTER_NAME\", \"email\":\"$COMMITTER_EMAIL\"}, \"content\":\"$(openssl base64 -A -in "$LOCAL_FILE_PATH")\" }"
注意事项
- 该接口仅支持上传100MB以内的文件,超过大小限制的文件需要对接Git LFS接口上传。
- 上传docx、jpeg、zip等二进制文件无需额外调整参数,接口会自动识别文件类型。
- 请确保你使用的GitHub令牌拥有目标仓库的写入权限,否则会返回403/404错误。
- Windows PowerShell环境下需要替换base64编码命令,将
$(openssl base64 -A -in "$LOCAL_FILE_PATH")替换为[Convert]::ToBase64String([IO.File]::ReadAllBytes($LOCAL_FILE_PATH))即可。
内容的提问来源于stack exchange,提问作者BAST23
相关产品推荐
相关产品推荐

