将日志文件转换为Base64并使用Curl将其上传到Github [英] Convert log files to base64 and upload it using Curl to Github
本文介绍了将日志文件转换为Base64并使用Curl将其上传到Github的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用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上已经有关于此错误消息的问题,它说要直接上载文件。查看此处: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}')
有没有人能指出我在这方面犯了什么错误?谢谢!
推荐答案
使用base64
命令而不是@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"
这篇关于将日志文件转换为Base64并使用Curl将其上传到Github的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文