将日志文件转换为Base64并使用Curl将其上传到Github [英] Convert log files to base64 and upload it using Curl to Github

查看:0
本文介绍了将日志文件转换为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆