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

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

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

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

(0)
上一篇 2022年7月22日 上午6:16
下一篇 2022年7月22日 上午6:16


相关推荐

  • 详解如何将中缀表达式转化为后缀表达式

    详解如何将中缀表达式转化为后缀表达式本文我将从两种角度来解析如何将中缀表达式转化为后缀表达式一 从应对考试角度来 在最快的时间内得出最准确的答案 首先我们应该知道 要想将中缀转化为后缀 需要借助堆栈实现 不准备画图了 画图有点浪费时间 我会用最简单明了的语言使读者弄懂 举个例子吧 比如将 2 9 6 3 5 4 转化为后缀表达式 2963 5 nbsp 4 nbsp nbsp 1 任何中缀表达式都由运算数 运算符 括号 大

    2026年3月18日
    1
  • javascript 字符串包含判断_js去除字符串前后的空格

    javascript 字符串包含判断_js去除字符串前后的空格本文教程操作环境:windows7系统、jquery3.2.1版本,DELLG3电脑。小编介绍过js中使用indexOf()方法判断字符串包含某个字符(https://www.py.cn/web/js/22856.html),是一个很好用的方法,但除了这个方法之外,JavaScript中还有四种方法可以实现判断字符串包含某个字符:1、使用字符串search()方法search()方法用于检…

    2022年10月7日
    6
  • Debian 使用VSFtpd安装配置架设FTP服务器「建议收藏」

    Debian 使用VSFtpd安装配置架设FTP服务器「建议收藏」Vsftpd的安装:aptitudeupdate//更新数据源列表aptitudeinstallvsftpd//安装vsftpdVsftpd的文件结构:/usr/sbin/vsftpd—-VSFTPD的主程序/etc/init.d/vsftpd—-启动脚本/etc/vsftpd.conf—-主配置文件/etc/pam…

    2022年7月21日
    17
  • 初学者如何在博客园发布博客[通俗易懂]

    初学者如何在博客园发布博客[通俗易懂]我也是第一次使用博客园,碰到问题后,也是各种尝试,希望同学们也能多尝试,找到适合自己需要的。下面是我在发博客时尝试过的3种方法,特别是对表格的处理。1.如果大家使用markdown编辑器,请参考娄

    2022年7月2日
    25
  • Json for Java API学习

    Json for Java API学习首先声明:本文来个很多网友的博客,我通过参考了他们的博客,大致的了解了一些项目中常用的Jsoninjava类和方法,以及关于json的个人理解个人对json的一些简单理解在最近的学习中,查阅了很多资料,了解了一些关于json的基本知识,下面做一个简单的总结:json是什么没有.json结尾的这种文件,json(JavaScriptObjectNotation)是一种简单的

    2022年6月6日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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