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

Karate Lab技术问询:如何发送二进制文件而非多部分表单?

在Karate中直接发送二进制文件(非Multipart表单)的实现方法

问题描述

我参考了upload.feature示例,但发现Karate默认的上传方式是Multipart表单请求。当前我的Karate脚本实现如下:

Scenario: Successul
        * karate.log(token, auth, common_headers)
        Given url 'https://webhook.site/e026040f-68ac-45e9-8add-c839fd46f0ba'
        And multipart field image = read('images/img1.png')
        And header Content-Type = 'image/png'
        When method PUT
        Then status 200

该脚本对应的curl命令(来自Postman)为:

curl --location --request PUT 'https://staging-ah.naluri.net/food-journal/upload?x-pri-id=qedSdhZU7UmXXztqFJyJw&x-verify-id=P2KUBtR07Qqk3j6U7tGrG' \
--header 'Content-Type: image/png' \
--form 'file=@"/Users/dennis.dao/workspace/repo/sample/karate-ui-sample/images/img1.png"'

但我实际需要实现的是直接发送二进制文件的请求,对应的curl命令如下:

curl --location --request PUT 'https://staging-ah.naluri.net/food-journal/upload?x-pri-id=qedSdhZU7UmXXztqFJyJw&x-verify-id=P2KUBtR07Qqk3j6U7tGrG' \
--header 'Content-Type: image/png' \
--data '@images/img1.png'

请问怎么在Karate里实现这种直接发送二进制文件的请求?


解决方案

要实现直接发送二进制文件作为请求体,无需使用multipart相关语法,直接通过request关键字绑定读取的二进制文件内容即可,具体步骤如下:

  1. 用read()方法读取二进制文件,Karate会自动识别并处理文件的二进制内容
  2. 通过request关键字将读取的内容设置为请求体
  3. 设置与文件匹配的Content-Type请求头

修改后的Karate脚本如下:

Scenario: Successful binary file upload
        * karate.log(token, auth, common_headers)
        Given url 'https://staging-ah.naluri.net/food-journal/upload?x-pri-id=qedSdhZU7UmXXztqFJyJw&x-verify-id=P2KUBtR07Qqk3j6U7tGrG'
        And request read('images/img1.png')
        And header Content-Type = 'image/png'
        When method PUT
        Then status 200

说明

  • read('images/img1.png')会直接读取文件的二进制内容,无需额外转换处理
  • request关键字会将该二进制内容作为整个请求体发送,完全对应curl --data '@file'的行为
  • 需确保Content-Type头设置为文件对应的MIME类型(示例中为image/png),与目标接口要求一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:22:56