使用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
相关产品推荐
相关产品推荐

