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

使用HttpClient4,post提交multipart/form-data数据问题由来: 在Vert.x的项目中,进行公众号开发的时候,发现回复用户图片的时候需要先上传图片,获取一个media_id,然后拿着这个media_id去发送数据。 问题是,Vert.x的vertx-web-client不提供表单文件上传(form-data)方式post请求。     于是,只能找一个HttpClient方法。发现组装一个这样的请求,并不简单解

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

问题由来:

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

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

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

解决方案:

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

          于是有代码:

 HttpClient httpClient = new DefaultHttpClient();

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

换成:

 HttpClient httpClient = HttpClients.createDefault();

   

         所有代码如下:

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上传详解

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • idea/ pycharm全局搜索快捷键不可用

    idea/ pycharm全局搜索快捷键不可用搜狗设置,系统快捷键设置,去掉繁体切换快捷键就ok了

  • 【机器学习】NMF(非负矩阵分解)

    【机器学习】NMF(非负矩阵分解)写在篇前  本篇文章主要介绍NMF算法原理以及使用sklearn中的封装方法实现该算法,最重要的是理解要NMF矩阵分解的实际意义,将其运用到自己的数据分析中!理论概述  NMF(Non-negativematrixfactorization),即对于任意给定的一个非负矩阵V,其能够寻找到一个非负矩阵W和一个非负矩阵H,满足条件V=W*H,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。…

  • mysql使用笔记

    mysql使用笔记

  • 自然语言处理 模型_CD模型

    自然语言处理 模型_CD模型CBOW一个用于快速训练得到词向量的神经网络模型,它的核心原理是中心词的前R个词和后R个词来预测中心词。它的网络模型相比NNLM模型来说,最大的变化是直接去除隐层的非线性激活过程,以此来加速网络的训练速度。CBOW的输入:假设中心词wiw_{i}wi​的上下文C(wi)={wj∣j∈[i−R,i)∩[i+1,i+R)}C(w_{i})=\{w_{j}|j\in[i-R,i)\cap[…

  • 浏览器在线视频播放加速方法——直接修改网页代码实现加速「建议收藏」

    现在有不少的视频网站,自带了播放加速的功能,例如油管、bilibili、慕课等等。在一些付费的网站中,一些自带的播放器是不支持视频加速的,因为已经被加速惯坏,变得很不习惯,在网上查阅资料,也找到了在线视频的加速的解决方法,这边做一个记录。一、html5播放器主要标志是*<video>*标签,这种是最方便实现加速的,因为原生支持。*defaultPlaybackRate…

  • Navicat 15 for MySQL 激活码[在线序列号]

    Navicat 15 for MySQL 激活码[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号