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

Api-platform v2.7.18中ApiTestCase文件上传测试失败求助

解决Api Platform v2.7.18中ApiTestCase测试文件上传$_FILES为空的问题

在Symfony环境下使用Api Platform的ApiTestCase测试API文件上传功能时,出现$_FILES变量为空、后端返回“no file uploaded”错误的情况。已确认测试文件存在、API密钥正确,尝试过相关方案仍无效,使用版本为api-platform/core v2.7.18。

问题根源

  1. 手动设置Content-Type: multipart/form-data会破坏Symfony HttpClient自动生成的带boundary的请求头,导致文件无法被正确解析。
  2. 文件参数放在extra数组中不符合Symfony测试客户端的参数规范,无法被正确传递。

修正后的代码示例

$pdfFile = self::$kernel->getProjectDir().'/app/data/tests/data/ara/blue_feedback.pdf';
$endPoint = $this->generateUrl('api-single-pdf-analysis');

$file = new UploadedFile(
    $pdfFile,
    'blue_feedback.pdf',
    'application/pdf',
    UPLOAD_ERR_OK, // 明确设置上传状态码,模拟真实上传场景
    true // 标记为测试用文件,避免自动移动文件
);

$client = static::createClient();
$response = $client->request('POST', $endPoint, [
    'headers' => ['apikey' => $this->apiKey], // 移除手动设置的Content-Type
    'body' => [
        'pdffile' => $file, // 文件直接放在body数组中
        // 其他表单字段可以在这里添加(如果有)
    ],
]);

额外验证步骤

  • 确认$pdfFile路径正确,且文件拥有可读权限
  • 后端接收逻辑中,确保使用的字段名与测试代码中的pdffile完全一致
  • 若后端使用Symfony的Request对象接收,可通过$request->files->get('pdffile')获取文件,而非直接访问$_FILES(更符合Symfony规范)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:27:22