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

如何用PHP CURL发送同名参数的多个multipart/form-data文件

实现方法

当然可以不用手动构造multipart消息体来实现需求。PHP的cURL扩展原生支持生成包含多个同名参数的multipart/form-data请求,只需要通过特定的数组格式传递POST字段即可。

具体代码示例

// 初始化cURL会话
$ch = curl_init('https://example.com/send/830a6665');

// 准备要上传的文件,使用CURLFile对象确保正确处理文件
$file1 = new CURLFile(
    './storage/file1.jpg',
    'image/jpeg', // MIME类型,可根据实际文件调整
    'file1.jpg'   // 文件名,可选,默认是原文件名
);
$file2 = new CURLFile(
    './storage/file2.jpg',
    'image/jpeg',
    'file2.jpg'
);

// 构造POST字段数组:用数字索引数组包裹多个同名的files参数
$postFields = [
    ['name' => 'files', 'file' => $file1],
    ['name' => 'files', 'file' => $file2]
];

// 设置cURL选项
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true, // 将响应内容以字符串返回,而非直接输出
    CURLOPT_HTTPHEADER => [
        'Authorization: XXXZZZZZZZXX' // 授权头
    ],
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $postFields // 传入构造好的字段数组
]);

// 执行请求并获取响应
$response = curl_exec($ch);

// 检查请求是否出错
if(curl_errno($ch)) {
    echo 'cURL错误:' . curl_error($ch);
}

// 关闭cURL会话
curl_close($ch);

// 处理响应
var_dump($response);

原理说明

当CURLOPT_POSTFIELDS传入的是数字索引数组,且每个元素是包含name(参数名)和file(CURLFile对象)的关联数组时,PHP cURL会自动生成符合要求的multipart/form-data请求体,其中每个文件对应的参数名都是files,不会自动添加[]后缀,和你提供的curl命令效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:45:45