如何使用REST-Assured发送multipart form格式文件上传POST请求
REST-Assured 发送Multipart Form格式请求解决方案
错误原因排查
你的写法存在两个核心问题导致请求失败:
- 手动指定
Content-Type: multipart/form-data请求头:REST-Assured会在调用multiPart方法后自动生成带正确boundary分隔符的请求头,手动指定的头缺少boundary参数,会导致服务端无法解析报文格式 - 混合使用
formParam和multiPart方法传递参数:部分服务端的multipart解析逻辑不兼容两种参数传递方式混用的报文,普通文本键值对也需要通过multiPart方法传递
正确实现代码
你需要传递两组文本键值对+1个文件参数的话,参考以下写法:
import java.io.File; import io.restassured.response.Response; import static io.restassured.RestAssured.given; public class MultipartUploadTest { public void uploadFile() { // 初始化待上传的文件对象,替换为你实际的文件路径 File uploadFile = new File("/local/path/to/your/file.jpg"); Response response = given() // 保留你原有HTTPS跳过校验逻辑 .relaxedHTTPSValidation() // 调试时可以开启日志打印完整请求,方便排查问题 .log().all() // 第一组文本键值对,替换为你实际的key和value .multiPart("tipo", "capital_relatorio_faturamento", "text/plain") // 第二组文本键值对,替换为你实际的第二个key和value .multiPart("yourSecondKey", "yourSecondValue", "text/plain") // 文件参数,第三个参数为文件对应的MIME类型,根据实际文件类型修改 .multiPart("arquivo", uploadFile, "image/jpeg") .when() // 替换为你实际的API接口地址 .post("https://your-api-domain.com/upload/path") .then() .extract() .response(); // 打印返回结果调试 System.out.println(response.asString()); } }
校验逻辑
你可以通过开启log().all()打印完整的请求报文,确认multipart格式的参数是否符合预期。
内容的提问来源于stack exchange,提问作者Nilton Araújo
相关产品推荐
相关产品推荐

