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

Postman上传文件成功但Apache HttpClient调用REST接口失败,OkHttp可正常运行

问题原因

你的Apache HttpClient代码错误点非常明确:手动硬编码设置了Content-type: multipart/form-data请求头,缺失了multipart请求必须的boundary分隔符参数。

当你使用MultipartEntityBuilder构建请求实体时,HttpClient会自动生成随机的boundary分隔符,并且自动给请求添加带boundary参数的Content-Type头,格式类似:Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW。你手动设置的头直接覆盖了这个自动生成的合法头,服务端拿到没有boundary的请求头,根本无法解析multipart表单里的文件内容,自然返回文件解析失败的错误。

而你写的OkHttp代码没有手动设置Content-Type头,框架自动完成了头和boundary的匹配,所以可以正常调用。

修复方案

直接删除手动设置Content-Type的那行代码即可:

// 删掉这行冗余配置
// request.setHeader("Content-type", "multipart/form-data");   

如果有特殊场景需要指定boundary,也可以用下面的方式显式配置,不要手动写死头:

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
// 显式指定boundary(非必须,默认会自动生成随机值)
builder.setBoundary("your-custom-boundary");
builder.addPart("file", fileBody);
HttpEntity entity = builder.build();
request.setEntity(entity);
// 从构建好的entity里获取Content-Type设置到请求头,保证boundary一致
request.setHeader(entity.getContentType());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:00