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

curl执行报错argument list too long,参考现有方案仍未解决求助

解决方案

报错原因

你原命令的报错核心原因:$(cat data.txt | base64 --wrap=0) 会把整个文件编码后的内容直接展开到curl的命令行参数中,当文件体积偏大时,展开后的参数总长度超过了Linux系统默认的命令行参数长度限制,就会触发「argument list too long」错误。另外你原命令中同时写了-d @data.txt和把data.txt内容嵌入JSON的逻辑,属于重复传参,会导致请求体格式错误,需要先删掉多余的-d @data.txt。

修复方案

方案1(推荐,无临时文件、自动处理特殊字符)

借助jq构造符合格式的JSON请求体,通过管道直接传给curl,全程不会把大文件内容放到命令行参数中:

cat data.txt | base64 --wrap=0 | jq -R --arg fname "$FileName" '{
  "data": {
    "type": "attachments",
    "attributes": {
      "attachment": {
        "content": .,
        "file_name": $fname
      }
    }
  }
}' | curl -X POST https://Path/to/attachments \
  -H 'content-type: application/vnd.api+json' \
  -H 'x-api-key: KEY' \
  -d @-

其中-d @-表示让curl从标准输入读取POST请求体内容。

方案2(无需安装jq,用临时文件实现)

先把完整请求体写入临时文件,再传给curl,同样规避命令行参数过长问题:

# 生成临时文件存储请求体
temp_req=$(mktemp)
# 写入JSON前半部分
cat > "$temp_req" <<EOF
{
  "data": {
    "type": "attachments",
    "attributes": {
      "attachment": {
        "content": "
EOF
# 追加base64编码后的文件内容
base64 --wrap=0 data.txt >> "$temp_req"
# 写入JSON后半部分
cat >> "$temp_req" <<EOF
",
        "file_name": "$FileName"
      }
    }
  }
}
EOF
# 执行curl请求
curl -X POST https://Path/to/attachments \
  -H 'content-type: application/vnd.api+json' \
  -H 'x-api-key: KEY' \
  -d @"$temp_req"
# 删除临时文件
rm -f "$temp_req"

注意事项

  • 如果文件名包含双引号、换行等特殊字符,优先使用方案1,jq会自动做转义处理,避免JSON格式错误。
  • 两种方案均从根源规避了大内容作为命令行参数传递的逻辑,不会触发参数长度超限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:39:05