前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用HttpClient4,post提交multipart/form-data数据

使用HttpClient4,post提交multipart/form-data数据

作者头像
全栈程序员站长
发布2022-09-15 11:34:36
9470
发布2022-09-15 11:34:36
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

问题由来:

在Vert.x的项目中,进行公众号开发的时候,发现回复用户图片的时候需要先上传图片,获取一个media_id,然后拿着这个media_id去发送数据

问题是,Vert.x的vertx-web-client不提供表单文件上传(form-data)方式post请求。

于是,只能找一个HttpClient方法。发现组装一个这样的请求,并不简单

解决方案:

用HttpClient4可实现的,下面看看实现方法:

于是有代码:

代码语言:javascript
复制
 HttpClient httpClient = new DefaultHttpClient();

发现DefaultHttpClient过时了,参考:DefaultHttpClient()过时官网api查看

换成:

代码语言:javascript
复制
 HttpClient httpClient = HttpClients.createDefault();

所有代码如下:

代码语言:javascript
复制
String postUrl = "https://" + Constants.WX_INTERFACE_HOST + "/cgi-bin/media/upload?access_token="  + accessToken  + "&type=" + type; HttpClient httpClient = HttpClients.createDefault(); File file = new File("riven.jpg"); if (file == null || !file.exists()) {  throw new FileNotFoundException(); } MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create(); multipartEntityBuilder  .addBinaryBody("media", file)  .setMode(HttpMultipartMode.RFC6532); HttpPost httpPost = new HttpPost(postUrl); httpPost.setEntity(multipartEntityBuilder.build()); httpPost.setHeader("Content-Type", ContentType.MULTIPART_FORM_DATA.toString()); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); String content = EntityUtils.toString(httpEntity); System.out.println(content);

其中,之前版本的MultipartEntity也过时了,HttpClient4.5采用了MultipartEntityBuilder方法,可以看到“Fluent”的影子.

为了加深对Multipart/form-data的了解,放上一个链接:Multipart/form-data上传详解

现在就是缺少了异步的方式,如果找到了异步请求的方法,我再贴到这里补充。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163290.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档