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。
问题根源
- 手动设置
Content-Type: multipart/form-data会破坏Symfony HttpClient自动生成的带boundary的请求头,导致文件无法被正确解析。 - 文件参数放在
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
相关产品推荐
相关产品推荐

