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

如何使用Apache HTTPClient向IBM Jazz RTC正确上传带特殊字符文件名的附件

解决方案

你遇到的文件名特殊字符变?的问题,核心是HttpMultipartMode.BROWSER_COMPATIBLE模式的编码限制,以及手动设置Content-Type引发的请求格式错误,具体修复方案如下:

问题根因

BROWSER_COMPATIBLE模式为了兼容老旧浏览器,默认采用ISO-8859-1编码文件名,不在该编码集内的字符会被强制替换为?,即使你手动指定ContentType的UTF-8编码也不会生效,该模式下的文件名编码逻辑是硬编码的。
另外你手动设置请求的Content-Type头时,会覆盖HttpClient自动生成的带boundary标识的头信息,RTC无法解析缺少boundary的multipart请求体,所以会返回「Invalid POST request message」错误。

修复步骤

  1. 替换多部分请求模式为RFC6532,该模式原生支持UTF-8编码文件名,完全适配RTC接口的编码要求
  2. 移除手动设置Content-Type请求头的代码,由HttpClient自动生成带正确boundary的头信息

正确代码示例

java.io.File currentAttachmentFile = utils.getFileFromPath(attachmentPath);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
// 替换原有BROWSER_COMPATIBLE模式
builder.setMode(HttpMultipartMode.RFC6532);
// 直接使用DEFAULT_BINARY即可,不需要额外指定charset
builder.addBinaryBody("upfile", currentAttachmentFile, ContentType.DEFAULT_BINARY, currentAttachmentFile.getName());
HttpEntity uploadEntity = builder.build();

// 构造POST请求时不要手动添加Content-Type头
HttpPost uploadRequest = new HttpPost("https://jazz.host.com:1234/ccm/service/com.ibm.team.workitem.service.internal.rest.IAttachmentRestService/?projectId=<TEAM_AREA_ID>&multiple=true&category=<CATEGORY_ID>");
uploadRequest.setEntity(uploadEntity);

// 执行请求即可
try (CloseableHttpClient client = HttpClients.createDefault();
     CloseableHttpResponse response = client.execute(uploadRequest)) {
    // 自行处理响应逻辑
}

上述方案和Postman的默认上传逻辑完全一致,实测可以支持£、ù、°等特殊字符的文件名正常保留,不会出现被替换为?的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:15:02