MultipartEntityBuilder实现多附件上传
创始人
2025-05-30 10:08:35
0

现在很多平台都会遇到与其它系统集成的情况。其中之一是调用第三方接口传输业务数据并上传文件。比如对方提供了这样一个文档:

我们可以先通过postman工具测试对方提供的接口,成功后可以通过该工具生成java代码使用,postman使用的是OkHttpClient来构建的请求。

这里我介绍的是MultipartEntityBuilder。

MultipartEntityBuilder是Apache HttpClient库中的一个实用工具,用于构建HTTP POST请求的多部分实体,它可以帮助开发人员轻松地将二进制数据添加到请求中,实现附件上传。

在MultipartEntityBuilder构建多部分实体时有一个比较重要的类是HttpMultipartMode,这个定义了如何将请求的各个部分组合在一起。HttpMultipartMode有几种不同的模式可供选择。

HttpMultipartMode.RFC6532:该规范定了定义了如何在multipart实体中处理unicode字符和国际化文本,该模式不会添加额外的空行。

HttpMultipartMode.BROWSER_COMPATIBLE:兼容浏览器模式,会在multipart实体的各部分之间添加一个额外的空行,已解决一些浏览器在解析multipart实体时可能出现的问题。

HttpMultipartMode.STRICT:严格模式,按照HTTP协议规定的格式来构建multipart实体,不会添加额外的空行。

最近在于第三方系统对接时,调用对方的接口上传文件,调用成功后到对方系统查看附件的文件名始终是乱码。后来发现,是MultipartEntityBuilder需要setMode(HttpMultipartMode.RFC6532)。

完整代码:

ContentType contentTypeJson = ContentType.create("application/json","UTF-8");

MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();

multipartEntityBuilder.setCharset(StandardCharsets.UTF_8);
multipartEntityBuilder.setMode(HttpMultipartMode.RFC6532);//设置模式,防止传输附件到第三方系统文件名乱码
multipartEntityBuilder.seContentType(ContentType.MULTIPART_FORM_DATA);

multipartEntityBuilder.addTextBody("data", jsonString, contentTypeJson);//设置请求格式

File file1 = new File("文件路径");

File file2 = new File("文件路径");

multipartEntityBuilder.addBinaryBody("files", new FileInputStream(file1), ContentType.DEFAULT_BINARY, file1.getName());

multipartEntityBuilder.addBinaryBody("files", new FileInputStream(file2), ContentType.DEFAULT_BINARY, file2.getName());

HttpPost httpPost = new HttpPost(请求接口地址);
httpPost.setEntity(multipartEntityBuilder.build());//将构建好的请求体放到HttpPost中。

String respContent="";
try {
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity =  httpResponse.getEntity();
            respContent = EntityUtils.toString(httpEntity,"UTF-8");
            System.out.println("result:"+respContent);
} catch (Exception e) {
            e.printStackTrace();
} finally {
            httpPost.releaseConnection();// 释放链接
}

相关内容

热门资讯

雷军:只有懂车、爱车,才能造好... 近日,在小米赛道体验日上,微博认证为小米公司新媒体总监的“神得强Steven”发微博称,参加小米赛道...
豪掷95亿!歌尔股份,继续加码... 文|侃见财经 伴随着苹果高增长不再,消费电子巨头们加速逃离苹果产业链已然是大势所趋。 不过,歌尔股...
智慧医疗新革命:DeepSee... 免责声明 本文引用的参考文献搜集于互联网,非原创,如有侵权请联系小编删除! 请勿将该文章用于任何商业...
A股,三大利好来袭! 多则利好消息引发市场关注! 近日,高盛将未来12个月MSCI中国指数的目标从85上调至90。同时,高...
和讯投顾王帅:沪指再创新高,不... 不要去追热点,抓好5个方向就可以了。和讯投顾王帅表示,今天的创业板又继续新高,但是对于沪指来说是反复...
三友科技:7月28日融资买入1... 证券之星消息,7月28日,三友科技(834475)融资买入116.81万元,融资偿还45.95万元,...
原创 特... 据报道,美国对韩国加征25%关税的最后期限近在眼前。与此同时,华盛顿正加紧向首尔施压,要求其将《美韩...
荣联科技跌0.75%,成交额1... 来源:新浪证券-红岸工作室 7月28日,荣联科技跌0.75%,成交额1.47亿元,换手率2.78%,...
烧15亿,把头像贴满地铁站,雷... 文|《BUG》栏目 闫妍 北京西二旗地铁站,腾讯、百度、网易、滴滴等知名大厂在此扎堆,这是北京最著名...
每孩每年3600元,育儿补贴官... 无论一孩、二孩、三孩,均可申领育儿补贴 文|《财经》记者 王静仪 编辑|王延春 流传数月的育儿补贴政...
成都实现境外银行卡“直刷”坐地... 7月28日,成都地铁正式上线银行卡刷卡过闸功能,乘客持银联卡及境外发行的维萨卡(Visa)、万事达卡...
李嘉诚突发!长和一纸公告,坐实... 金融界7月28日消息 李嘉诚旗下的长和一纸公告出售港口一事迎来最近进展,坐实内地企业加入交易的传闻。...
坚持绿色发展,华帝荣获《证券之... 7月25日,2025证券之星ESG年度论坛暨第三届ESG新标杆企业奖颁奖盛典在上海盛大举行。作为厨电...
1219亿美元!全球AI领域吸... 人工智能领域正经历着前所未有的资本汇聚浪潮。2025年上半年,全球AI领域吸引风险投资1219亿美元...
美股散户狂欢背后,华尔街空头本... 美股散户持续上演狂欢的同时,华尔街空头正遭受惨痛打击。 S3 Partners数据显示,截至上周四,...
广期所出手,推进光伏组件期货研... 来源:集邦新能源网 集邦光储观察获悉,在近期中国光伏行业协会主办的光伏行业2025年上半年发展回顾与...
原创 左... 作者︱余在洋 与其抱怨环境糟糕,不如弯腰探求“活下来”的创新之道。就像上海这位面馆老板,他用“左手一...
股市必读:金博股份(68859... 截至2025年7月28日收盘,金博股份(688598)报收于27.23元,上涨0.67%,换手率2....
原创 高... 8天。2025年春节高速免费通行长达8天,7座及以下小客车全程免单。你是不是也想薅羊毛?想玩个骚操作...
标普500指数屡创新高,大型科... 21世纪经济报道记者舒晓婷 北京报道 受强劲业绩以及最新贸易动态提振,过去一周美国三大股指集体收涨。...