Karate 1.3.0多文件上传用已弃用multipart/mixed,如何改为form-data?
Karate 1.3.0 多文件上传:替换multipart/mixed为独立form-data项
可以覆盖默认行为,生成符合RFC7578规范的多文件上传请求(每个文件对应独立的form-data项),有两种简洁的实现方式:
方式1:数组形式定义多文件
直接将多个文件配置放在数组中,Karate会自动生成独立的form-data部分:
Given path 'files', 'multiple' And multipart file files = [{ read: 'test.pdf', filename: 'upload-name1.pdf', contentType: 'application/pdf' }, { read: 'test.pdf', filename: 'upload-name2.pdf', contentType: 'application/pdf' }] When method post Then status 202
方式2:带索引的参数名
保持多行声明的习惯,使用files[]作为参数名,明确指示为数组类型:
Given path 'files', 'multiple' And multipart file files[] = { read: 'test.pdf', filename: 'upload-name1.pdf', contentType: 'application/pdf' } And multipart file files[] = { read: 'test.pdf', filename: 'upload-name2.pdf', contentType: 'application/pdf' } When method post Then status 202
效果说明
修改后的请求会生成服务器兼容的格式,每个文件对应独立的form-data块,示例如下:
Content-Type: multipart/form-data; boundary=xxxxxx --xxxxxx content-disposition: form-data; name="files"; filename="upload-name1.pdf" content-type: application/pdf content-transfer-encoding: binary ... --xxxxxx content-disposition: form-data; name="files"; filename="upload-name2.pdf" content-type: application/pdf content-transfer-encoding: binary ... --xxxxxx--
问题原因
Karate 1.3.0对重复同名的multipart参数处理逻辑做了调整,默认将多文件打包为multipart/mixed嵌套结构(该类型已被RFC7578弃用),而早期版本的Karate会直接生成多个独立的form-data项,因此不会出现兼容性问题。
内容的提问来源于stack exchange,提问作者Rob Martin
相关产品推荐
相关产品推荐

