当前位置:首页 > 文章列表 > 文章 > 软件教程 > 开发工具 curl multipart 上传 怎样处理

开发工具 curl multipart 上传 怎样处理

来源:17golang原创 2026-10-22 06:45:07 0浏览 收藏

用 curl 上传文件并同时提交表单字段时,关键是先看接口要求的编码类型:如果服务端接收的是 multipart/form-data,使用 -F 或 --form;不要把文件字段写进 -d。文件字段用 @本地文件 表示,普通文本字段可以用 --form-string 发送。

官方地址:https://curl.se/docs/manpage.html

最小可用写法是:curl -F 'title=月度报告' -F 'file=@report.csv' https://api.example.test/upload。字段名必须和接口约定一致,文件路径必须指向当前机器可读的文件。

先确认请求体类型和字段名

打开接口文档或表单 HTML,先确认它是否声明了 enctype="multipart/form-data"。只有这一类表单才适合用 -F。如果接口只接收普通键值对,通常应使用 -d,两者不是同一个请求体。

curl 的字段名来自服务端表单字段,例如服务端定义的是 file,命令中的左侧就必须是 file;本地文件名只写在 @ 后面。

原创开发工具界面说明图,展示 multipart/form-data、文本字段 title 和文件字段 file 的对应关系
图1:界面说明图,查看 multipart 表单中普通字段与文件字段的对应关系。

用 -F 组合普通字段和文件字段

下面的命令把一个文本字段和一个文件字段放到同一个 multipart 请求中。示例中的注释说明了每个参数的用途,实际使用时把 URL、字段名和路径替换成接口文档中的值。

# -F 让 curl 组织 multipart/form-data 请求体
curl \
  -F 'title=月度报告' \
  -F 'file=@./report.csv' \
  'https://api.example.test/upload'

@./report.csv 表示读取本地文件内容并作为文件部件上传;它不是把字符串 @./report.csv 当作普通文本发送。文件字段缺失时,优先检查路径、当前工作目录和服务端字段名。

文本值有 @ 或分号时改用 --form-string

如果普通文本本身来自用户输入,可能以 @ 开头,或包含 ;type= 这样的片段,直接写在 -F 中容易触发 curl 的特殊语义。此时用 --form-string,让值按字面发送。

# --form-string 保留文本原样,不把开头的 @ 解释成文件路径
curl \
  --form-string 'title=@临时标签' \
  -F 'file=@./report.csv' \
  'https://api.example.test/upload'

文件仍然使用 -F,因为它需要告诉 curl 读取本地文件并建立文件部件。不要为了规避特殊字符而把整个 multipart 请求改成 -d,那会改变请求体类型。

多个文件和 MIME 类型怎么写

不同字段上传不同文件时,重复写 -F 即可;如果接口允许同一个字段接收多个文件,也可以在一个字段值中列出多个文件。文件类型不明确时,可以在文件名后追加 ;type=...,但最终是否接受仍由服务端校验规则决定。

# 两个字段对应两个文件,字段名必须按接口约定填写
curl \
  -F 'avatar=@./avatar.png;type=image/png' \
  -F 'attachment=@./report.csv;type=text/csv' \
  'https://api.example.test/profile'

常见错误是把服务端字段名写成了本地文件名,或者把多个文件误放进只允许单文件的字段。先对照接口定义,再决定是重复字段还是拆成不同字段。

根据响应排查上传问题

请求返回后,先看服务端响应,不要只看 curl 是否输出了进度条。字段缺失通常说明左侧字段名不对;服务端提示无法读取文件时,检查本地路径和权限;收到“不是 multipart”之类的提示时,检查是否误用了 -d 或手工覆盖了 Content-Type。

原创开发工具界面说明图,展示上传文件、字段映射、multipart 请求体和 HTTP 200 响应的对应状态
图2:结果说明图,查看文件字段、普通字段与服务端响应的对应状态。

通常不需要手写 multipart 的 boundary。让 curl 根据各个 -F 参数自动组织请求体,手工设置一个不匹配的 Content-Type 反而可能让服务端无法解析。

常见问题

为什么用 -d 上传文件后服务端拿不到文件?

-d 默认发送的是普通表单或原始数据,不会按文件部件组织 multipart。改为 -F 'file=@文件路径',并核对字段名。

为什么文本字段里的 @ 被当成文件?

这是 -F 的文件语义。需要原样发送文本时使用 --form-string。

是否应该自己设置 Content-Type?

一般不需要。curl 会根据 -F 生成 multipart 请求及边界;只有接口文档明确要求额外请求头时,才单独添加其它业务头。

小结

curl multipart 上传可以按三点记忆:-F 负责文件部件和 multipart 请求,--form-string 负责不应被特殊解析的文本,字段左侧名称必须服从接口约定。遇到失败时,从请求体类型、字段名、本地路径和响应信息四处排查,通常能快速定位问题。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
开发工具 Actions 矩阵传递工件 怎样处理开发工具 Actions 矩阵传递工件 怎样处理
上一篇
开发工具 Actions 矩阵传递工件 怎样处理
AI 工具调用接回多轮对话 怎样处理
下一篇
AI 工具调用接回多轮对话 怎样处理
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    586次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    622次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    656次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    622次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    438次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码