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

CircleCI场景下如何通过单条curl命令实现multipart/form-data批量文件上传

单curl实现多文件multipart一次性上传的可落地方案

实现逻辑

通过bash数组暂存全部curl请求参数,将固定表单字段、待匹配文件对应的multipart上传参数统一收集为变量值后,拼装成完整的请求命令单次执行,替代原有逐文件发起curl请求的逻辑。

CircleCI 流水线可直接复用的代码

cd ~/project

# 初始化curl参数变量(数组形式,兼容特殊字符文件名)
CURL_ARGS=(
  -k
  -H "Accept: application/json"
  -H "Authorization: Bearer $bearertoken"
  -F "deployment-name=${CIRCLE_SHA1:0:7}"
  -F "deployment-source=circleci"
  -F "enable-duplicate-filtering=false"
  -F "deploy-changed-only=true"
)

# 收集所有匹配规则的文件,逐一生成上传参数加入变量
while IFS= read -r -d '' file; do
  # 完全对齐原有单文件上传的参数格式
  CURL_ARGS+=( -F "${file}=@${file}" )
done < <(find . -name "*.txt*" -type f -print0)

# 单条请求完成所有文件上传
curl "${CURL_ARGS[@]}" http://www.blah.com

实现细节说明

  • 采用数组形式存储参数变量,而非普通字符串:避免shell自动分词导致的参数错位,即便文件名包含空格、中文、特殊符号,也能正确识别文件路径完成上传。
  • 匹配文件的遍历逻辑采用find -print0搭配read -d ''的组合写法,适配全类型的合法文件路径,不会因为路径中的特殊字符中断遍历、错配文件。
  • 循环生成的参数格式完全对齐原有单文件上传的逻辑,后端接口不需要做任何适配调整,curl会自动按照multipart/form-data的规范,在同一个表单请求中拼接所有文件的二进制段。
  • 相比原有逐文件发起请求的写法,该方案减少了重复TCP建连、TLS握手、请求头重复传输的开销,待上传文件数量越多,流水线任务的运行效率提升越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 00:36:03