【发布时间】:2021-10-05 09:32:21
【问题描述】:
我正在尝试使用其 API 将文件上传到 Github。
以下代码有效,但仅适用于小于 1MB 的较小内容。
tar -czvf logs.tar.gz a.log b.log
base64_logs=$(base64 logs.tar.gz | tr -d \\n)
content_response=$(curl \
-X PUT \
-u :"$GIT_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"$content_url" \
-d '{"message": "Log files", "content": "'"$base64_logs"'"}')
对于有点大的内容,我收到以下错误:
/usr/bin/curl: Argument list too long
现在,关于这个错误消息已经有一个关于 SO 的问题,它说直接上传文件。见这里:curl: argument list too long
当我尝试这个时,我收到了 problem parsing JSON 错误消息。
tar -czvf logs.tar.gz a.log b.log
base64_logs=$( base64 logs.tar.gz | tr -d \\ ) > base64_logs.txt
content_response=$(curl \
-X PUT \
-u :"$GIT_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"$content_url" \
-d '{"message": "Log files", "content": @base64_logs.txt}')
谁能指出我在这里犯错的地方?谢谢!
【问题讨论】:
-
jq -n '{"message": "Log files", "content": ($content | @base64)}' --rawfile content yourfilehere -
用
-d $( jq -n '{"message": "Log files", "content": ($content | @base64)}' --rawfile content logs.tar.gz )替换行返回argument list too long错误。 -
Curl 抱怨参数列表太长,因为生成的 JSON 长度超过了参数缓冲区长度,并且因为子外壳扩展周围没有双引号,它在空格处拆分为多个参数。基本上:
jq -n '{"message": "Log files", "content": ($content | @base64)}' --rawfile content logs.tar.gz | curl --data-binary @- ... -
成功了,您愿意将此评论作为答案,以便我接受吗?
-
jq @base64 只能编码文本,不能像 gz 存档那样编码二进制数据。因此,不要使用 Jq 编码 base64,而是使用 base64 命令。我会回答这个问题。
标签: json bash github curl github-api