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

Karate框架如何在同一请求内同时传递表单文本数据与上传文件

解决方案

问题根因

你当前遇到的问题是Karate框架默认会为multipart field声明的普通表单字段自动添加空的filename属性,绝大多数后端服务在解析multipart/form-data请求时,会将所有携带filename属性的请求part识别为文件类型,不会归入普通表单字段的取值范围,因此服务端无法正常获取destination字段的值。

修复方法

两种常用可行方案如下:

方案1:显式指定filename为空

在声明multipart field时,通过对象写法明确设置filename为null,避免生成多余的空filename属性:

Given path 'files'
* multipart file fileUpl = { read: 'img1.jpeg', filename: 'img1.jpeg' }
* multipart field destination = { value: "posts", contentType: "text/plain", filename: null }
When method post
Then status 200

方案2:使用field关键字(适用于Karate 1.0+版本)

更高版本的Karate提供了更简洁的field关键字,专门用于声明multipart请求下的普通表单字段,会自动过滤不需要的属性:

Given path 'files'
* multipart file fileUpl = { read: 'img1.jpeg', filename: 'img1.jpeg' }
* field destination = "posts"
When method post
Then status 200

注意事项

不要手动添加Content-Type: multipart/form-data请求头,Karate会自动生成带正确边界值的请求头,手动指定反而会导致后端无法正常解析表单内容。

修改后重新发起请求,destination对应的请求part将不会携带filename=""属性,服务端即可正常识别并获取字段值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:57:02