将日志文件转换为 base64 并使用 Curl 将其上传到 Github
Convert log files to base64 and upload it using Curl to Github
我正在尝试使用 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上已经有关于这个错误信息的提问了,说是直接上传文件。看这里:
当我尝试此操作时,我收到一条 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}')
谁能指出我哪里出错了?谢谢!
使用 base64
命令而不是 jq
中的 @base64
过滤器,因为后者只能编码文本数据而不是来自 .gz
存档的二进制数据.
将 base64 流通过管道传输到 jq
以将其格式化为 JSON 数据流。
Curl 将读取 JSON 数据流并发送。
# use base64 to encode binary data and -w0 all in one-line stream
base64 --wrap=0 logs.tar.gz |
# JSON format from raw input
jq \
--raw-input \
--compact-output \
'{"message": "Log files", "content": . }' |
# Pipe JSON to curl
curl \
--request PUT \
--user ":$GIT_TOKEN" \
--header "Accept: application/vnd.github.v3+json" \
--header 'Content-Type: application/json' \
--data-binary @- \
--url "$content_url"
我正在尝试使用 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上已经有关于这个错误信息的提问了,说是直接上传文件。看这里:
当我尝试此操作时,我收到一条 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}')
谁能指出我哪里出错了?谢谢!
使用 base64
命令而不是 jq
中的 @base64
过滤器,因为后者只能编码文本数据而不是来自 .gz
存档的二进制数据.
将 base64 流通过管道传输到 jq
以将其格式化为 JSON 数据流。
Curl 将读取 JSON 数据流并发送。
# use base64 to encode binary data and -w0 all in one-line stream
base64 --wrap=0 logs.tar.gz |
# JSON format from raw input
jq \
--raw-input \
--compact-output \
'{"message": "Log files", "content": . }' |
# Pipe JSON to curl
curl \
--request PUT \
--user ":$GIT_TOKEN" \
--header "Accept: application/vnd.github.v3+json" \
--header 'Content-Type: application/json' \
--data-binary @- \
--url "$content_url"