You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Curl将日志文件转base64上传GitHub遇参数过长、JSON解析错误求助

问题原因与解决方案

现有代码的3个核心错误

  • 生成base64文件的命令逻辑错误:你写的base64_logs=$( base64 logs.tar.gz | tr -d \\ ) > base64_logs.txt 中,$()的输出全部赋值给了base64_logs变量,没有内容输出到标准输出,最终得到的base64_logs.txt是空文件;同时你用tr -d \\删除的是反斜杠,原本应该删除base64编码自动生成的换行符,逻辑完全不符合要求。
  • curl的-d参数的@文件名语法仅在-d的参数值完全以@开头时才会生效,你把@base64_logs.txt放在JSON字符串内部,curl不会解析这个标记,只会把它当成普通字符串传递,导致JSON格式完全不符合要求。
  • 即使curl支持JSON内部解析@标记,你构造的JSON里content的取值也缺少双引号包裹,同样会触发JSON解析错误。

正确实现代码

推荐用jq工具构造合法JSON,全程不需要处理转义、也不会出现参数过长问题:

# 打包日志文件
tar -czvf logs.tar.gz a.log b.log
# 生成无换行的base64编码,直接写入临时文件(macOS环境请把-w0换成-b0)
base64 -w0 logs.tar.gz > base64_logs.txt
# 用jq构造合法JSON,通过标准输入传递给curl
content_response=$(jq -n --rawfile content base64_logs.txt '{"message": "Log files", "content": $content}' | curl \
  -X PUT \
  -u :"$GIT_TOKEN" \
  -H "Accept: application/vnd.github.v3+json" \
  "$content_url" \
  -d @-)

代码说明

  • --rawfile参数会把指定文件的内容完整读取为字符串,自动处理所有转义逻辑,保证JSON格式合法
  • curl的-d @-代表从标准输入读取请求体,完全避开了命令行参数长度限制

内容的提问来源于stack exchange,提问作者disp_name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:24:04