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

如何通过PHP Curl向Spring Boot API传输多个文件?

PHP通过Curl向Spring Boot API上传多文件解决方案

问题核心

Spring Boot接口的@RequestPart("images") MultipartFile[]要求接收同一参数名images下的多个文件,而PHP常规的数组键名(如images[0])或直接传递数组的方式不符合Spring的参数解析规则,导致文件无法被识别。

正确实现代码

<?php
// 1. 构造MyDataDto对应的JSON数据
$myData = [
    "field1" => "示例值1",
    "field2" => "示例值2"
];
$jsonData = json_encode($myData);

// 2. 准备多个待上传的文件(使用CURLFile对象,PHP 5.5+支持)
$uploadFiles = [
    new CURLFile('/绝对路径/图片1.jpg', 'image/jpeg', '自定义文件名1.jpg'),
    new CURLFile('/绝对路径/图片2.png', 'image/png', '自定义文件名2.png')
];

// 3. 构造POST请求字段:关键是将多个文件存入同一`images`键的数组
$postFields = [
    // 用CURLStringFile指定data字段的Content-Type为JSON(PHP 7.4+支持)
    'data' => new CURLStringFile($jsonData, 'application/json'),
    'images' => $uploadFiles
];

// 4. 初始化并配置CURL
$curlHandle = curl_init('http://你的Spring Boot接口地址');
curl_setopt($curlHandle, CURLOPT_POST, true);
curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
// 若接口是HTTPS且需要跳过证书验证,可开启以下选项(生产环境不推荐)
// curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);

// 5. 执行请求并处理响应
$response = curl_exec($curlHandle);
$httpStatus = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);

curl_close($curlHandle);

// 输出结果
echo "HTTP状态码: {$httpStatus}\n";
echo "接口响应: {$response}\n";
?>

关键说明

  1. 参数格式匹配:

    • 直接将多个CURLFile对象存入images键的数组,PHP会自动编码为multipart/form-data格式,每个文件都使用images作为参数名,完全匹配Spring Boot的MultipartFile[]解析规则。
    • 之前尝试的images[0]格式会被Spring识别为独立参数(而非数组元素),因此无法被接收。
  2. data字段处理:

    • 由于Spring用@RequestPart("data")接收DTO,必须指定该字段的Content-Type为application/json,PHP 7.4+可使用CURLStringFile实现;若使用更低版本PHP,需手动拼接多部分请求体或升级PHP版本。
  3. CURLFile的优势:

    • 替代已废弃的@前缀文件路径写法,避免安全风险,同时确保文件上传的兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:11:05