使用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RTX 2080 Ti挖矿实测:强悍创纪录 但挖矿还是得看AMD[通俗易懂]

    RTX 2080 Ti挖矿实测:强悍创纪录 但挖矿还是得看AMD[通俗易懂]NVIDIA图灵架构的新一代显卡RTX2080、RTX2080Ti已经上市,想必会有不少人疑问:用它们来挖矿如何?能大赚一笔吗?Hardwareluxx就此作了一番特别测试,所用两款新卡均为FoundersEdition公版卡,挖矿测试软件则是ClaymoreDualEthereumGPUMinerv11.9,挖的是以太坊,但还是7月份的版本,显然优化会是个…

    2022年4月29日
    226
  • Java单例模式实现的两种方式和应用场景

    Java单例模式实现的两种方式和应用场景单例模式的定义个人理解,单例是指单个实例,在整个应用程序当中有且仅有一个实例存在,该实例是通过代码指定好的(自行创建的)。为什么要使用解决在高并发过程中,多个实例出现逻辑错误的情况。在特定的业务场景下避免对象重复创建,节约内存。实现的两种方式饿汉式顾名思义,不管有没有使用到该对象,只要程序启动成功,该单实例对象就存在。代码如下:/***饿汉式*/publicclassSingletonHungry{privatestaticSingletonHung

    2022年8月11日
    5
  • 什么是SQL游标?[通俗易懂]

    什么是SQL游标?[通俗易懂]1.1游标的概念游标(Cursor)它使用户可逐行访问由SQLServer返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据

    2022年7月4日
    22
  • mysql查询语句select-(null,not null,is null和is not null)

    mysql查询语句select-(null,not null,is null和is not null)1一些概念  1.1null与notnull  null和notnull是mysql的字段属性,或称为数据类型的属性,不属于任何类型。null值也不等同于空值,空值是不占用存储空间的,null占用存储空间,如对myisam表占用1bit额外存储空间。  1.2isnull与isnotnull  isnull和isnotnull是mysq

    2022年6月1日
    124
  • git已经提交的文件回复忽略「建议收藏」

    git已经提交的文件回复忽略「建议收藏」将文件加入到忽略文件中使用命令,已提交的文件如何恢复忽略git rm –cached 文件git rm –cached -r 文件夹git rm –cached .push到远程

    2022年8月8日
    0
  • java调用Oracle分页存储过程

    Java程序–创建游标包–存储过程推荐:http://www.cnblogs.com/roucheng/p/3504465.html

    2021年12月27日
    36

发表回复

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

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