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

使用Karate Framework上传图片失败问题求助

解决Karate Framework二进制文件上传损坏问题

我正在测试Sirv API的文件上传功能,使用Karate Framework时遇到了问题:上传的图片总是损坏,数据未以正确的二进制形式发送。但相同的请求用curl或Postman的Binary模式可以正常完成上传。

正常运行的curl命令

curl --location 'https://api.sirv.com/v2/files/upload?filename=%2Funtitled2.png' \
--header 'authorization: Bearer [pass your token]' \
--header 'Content-Type: image/png' \
--data '@/C:/Users/aadit/Downloads/220px-Selenium_Logo.png'

我当前的Karate Feature代码

Feature: File Upload

Scenario: File Upload
Given url "https://api.sirv.com/v2/files/upload?filename=%2Funtitled1.png"
And header authorization = 'Bearer [token]'
And multipart field image = read('payloads/Untitled1.png')
And header Content-Type = 'image/png'
When method post
Then status 200
Given multipart file myFile = { read: 'payloads/Untitled1.png', filename: 'Untitled1.png', content-type: 'application/octet-stream' }
Then method post
Then status 200

问题原因与解决方案

问题出在误用了multipart语法——这个API要求直接将二进制文件内容作为请求体发送,而非使用multipart/form-data格式。正确的做法是直接把文件内容赋值给request,配合对应的Content-Type:

修正后的Karate代码

Feature: File Upload

Scenario: 二进制文件上传
Given url "https://api.sirv.com/v2/files/upload?filename=%2Funtitled1.png"
And header authorization = 'Bearer [你的token]'
And header Content-Type = 'image/png'
And request read('payloads/Untitled1.png')
When method post
Then status 200

关键说明

  • read('文件路径')默认会以二进制模式读取文件,直接赋值给request后,Karate会将文件内容作为原始请求体发送,和curl的--data @文件、Postman的Binary模式行为完全一致。
  • 确保Content-Type与文件类型匹配:PNG图片用image/png,通用二进制文件用application/octet-stream。
  • 检查文件路径是否正确:read()的路径是相对于当前.feature文件所在目录的相对路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:00:10