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

问题由来:

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


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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值