httpclient 多附件上传
多附件上传实例:
/*** 多附件上传* @param host* @param uri* @param attachment 附件* @param param body参数* @return*/public String upload(String host, String uri, Map<String,String> attachment, Map<String, String> param) {logger.info("*****************request*****************");CloseableHttpClient httpClient = null;CloseableHttpResponse response = null;MultipartEntityBuilder builder = MultipartEntityBuilder.create();;File file = null;InputStream inputStream = null;String url = host + uri;String rst = "";try {httpClient = HttpClients.createDefault();logger.info("请求路径: "+ url);HttpPost httpPost = new HttpPost(url);for(String fileName:attachment.keySet()){inputStream = this.getClass().getClassLoader().getResourceAsStream(attachment.get(fileName)); //获取resources下的资源文件file = new File(attachment.get(fileName));builder.addBinaryBody(fileName, inputStream, create("multipart/form-data", Consts.UTF_8), file.getName());}for (Map.Entry<String, String> entry : param.entrySet()) {String key = entry.getKey();String value = entry.getValue();StringBody stringBody = new StringBody(value, create("text/plain", Consts.UTF_8));builder.addPart(key, stringBody);logger.info("请求参数:"+key+":"+ value);}HttpEntity reqEntity = builder.build();httpPost.setEntity(reqEntity);// 发起请求 并返回请求的响应response = httpClient.execute(httpPost);// 获取响应对象HttpEntity resEntity = response.getEntity();if (resEntity != null) {// 打印响应内容rst = EntityUtils.toString(resEntity, Charset.forName("UTF-8")) ;logger.info("*****************response*****************");logger.info("响应结果: " +rst);}// 销毁EntityUtils.consume(resEntity);return rst;} catch (Exception e) {logger.info("出错啦: "+e.getMessage());e.printStackTrace();return "出错了";} finally {try {if (response != null) {response.close();}} catch (IOException e) {e.printStackTrace();}try {if (httpClient != null) {httpClient.close();}} catch (IOException e) {e.printStackTrace();}}}
调用方法
public String uploadImage () throws Exception {Map<String, String> params = new HashMap<>();params.put("uploadType", "1");params.put("repayReason", "测试数据");Map<String, String> attachment= new HashMap<>();attachment.put("imageFile","picture/repayPic.jpg"); //该附件放在resources包下的picture包里面attachment.put("images","picture/repay.jpg");String rst = baseRequest.upload("http://xxxx.com","/web/upload", attachment, params);return rst;
}
请求类型表:查看
1.设置上传的模式;
setMode(HttpMultipartMode mode),其中mode主要有BROWSER_COMPATIBLE,RFC6532,STRICT三种,默认值是STRICT。
2.创建MultipartEntityBuilder对象,并添加需要上传的数据;
a.利用MultipartEntityBuilder.create()来创建对象;
b.addBinaryBody:以二进制的形式添加数据,可以添加File、InputStream、byte[]类型的数据。
addBinaryBody(String name, File file, ContentType contentType, String filename)
addBinaryBody(String name, InputStream stream, ContentType contentType, String filename)
addBinaryBody(String name, byte[] b, ContentType contentType, String filename)
c.addTextBody:添加文本数据
addTextBody(String name, String text, ContentType contentType)
d.addPart:以Key/Value的形式添加ContentBody类型的数据
addPart(String name, ContentBody contentBody)
MultipartEntityBuilder用法
2.MultipartEntityBuilder这个类主要用于创建HttpEntity。它的主要方法有:
修饰符和类型 |
方法和描述 |
MultipartEntityBuilder |
addBinaryBody(String name, byte[] b) 将字节数组以二进制的形式添加数据。 |
MultipartEntityBuilder |
addBinaryBody(String name, byte[] b, ContentType contentType, String filename) 将字节数组以二进制的形式添加数据。 |
MultipartEntityBuilder |
addBinaryBody(String name, File file) 将文件以二进制的形式添加数据。 |
MultipartEntityBuilder |
addBinaryBody(String name, File file, ContentType contentType, String filename) 将文件以二进制的形式添加数据。 |
MultipartEntityBuilder |
addBinaryBody(String name, InputStream stream) |
MultipartEntityBuilder |
addBinaryBody(String name, InputStream stream, ContentType contentType, String filename) 将输入流以二进制的形式添加数据。 |
MultipartEntityBuilder |
addPart(String name, ContentBody contentBody) 添加ContentBody 类型的数据。 |
MultipartEntityBuilder |
addTextBody(String name, String text) 添加文本数据。 |
MultipartEntityBuilder |
addTextBody(String name, String text, ContentType contentType) 以指定的内容类型添加文本数据。 |
HttpEntity |
build() 创建一个HttpEntity。 |
static MultipartEntityBuilder |
create() 创建一个MultipartEntityBuilder对象。 |
MultipartEntityBuilder |
setBoundary(String boundary) 设置边界。 |
MultipartEntityBuilder |
setCharset(Charset charset) 设置请求的编码格式。 |
MultipartEntityBuilder |
setLaxMode() |
MultipartEntityBuilder |
setMode(HttpMultipartMode mode) 设置模式。 |
MultipartEntityBuilder |
setStrictMode() |
转载于:https://www.cnblogs.com/unknows/p/11195257.html
httpclient 多附件上传相关推荐
- discuz 删除系统自带的附件上传
由于使用了DBank的论坛附件程序,所以想去掉系统自带的附件上传程序,后台不能设置,研究了下,找到一下方法: 1. template\default\forum\editor_menu_forum. ...
- java多附件上传 实例demo
java多附件上传 实例demo <%@ page language="java" import="java.util.*" pageEncoding=& ...
- 使用DOM方法实现多附件上传客户端
有时候需要传多个附件,再次我用javascript的dom方式实现了次功能,很实用的. 功能呢就是用户可以添加多个附件,每次点击 添加 添加一个新的上传文本域,对于已经添加的上传文本域,用户可以 点击 ...
- soapui 证书_SoapUI入门之附件上传和配置Https请求
已经欠了一堆的作业了,吼吼~ 拖延症是个大bug,废话不多说,马上进入咱们SoapUI的学习中来吧~ 现在开始我们的SoapUI集成测试学习之道: 一.如何使用SoapUI进行附件上传 做人还是不能这 ...
- python autoit获取网页ajax数据_WebDriver + Python 调用AutoIt例子(实现139邮箱写信页的附件上传)...
PS: 前提 1. 安装好webdriver下python实现的环境 2. 安装好Autoit(默认安装就可以了) 3. 另外需要一个139邮箱账号,脚本运行时上传的图片在附件里面 #coding:c ...
- ant react 上传_React实战之Ant Design—Upload上传_附件上传
React实战之Ant Design-Upload上传_附件上传 Upload组件大家都在官方文档中看过了,但写的时候还是会遇到许多问题,一些新手看了文档后感觉无从下手,本文过多的简绍就不说了,直接看 ...
- httpclient base64 文件上传_代码级别的上传下载神器
前言 不知道大家在工作中有没有碰到过在代码级别中进行上传和下载呢,一般的场景为调用第三方的接口进行上传大文件和下载大文件. 我一个小伙伴最近在工作中就碰到了,他需要在代码中调用第三方http接口进行原 ...
- (转)基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用
http://www.cnblogs.com/wuhuacong/p/3343967.html 大概一年前,我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随 ...
- Airtable无法上传附件/图片;点击附件上传没反应;不安全的地址怎么设置为受信任;解决方法亲测有效
问题描述 在使用Airtable的时候突然遇到 附件上传不了的情况,就是 或者是 检查的时候刷新页面,点击附件上传反复出现下面这些信息: DevTools 无法加载来源映射:无法加载 net::ERR ...
最新文章
- [转]总结使用Unity 3D优化游戏运行性能的经验
- 分页的limit_Presto分页功能概述
- 漫画算法python版下载_用 Python 下载漫画
- 使用Perl5获取有道词典释义
- 首席建筑师之光线追踪教程
- 批处理for循环逐一处理目录中的文件
- 刷题42-m升水倒入n个杯子(动态规划)
- 多张图片合成一个tif文件
- 通过python实现同步修改本地电脑时间
- XGBoost 与 信用卡诈骗数据集 三
- c语言编译器中输出虚线,请教:c语言中用什么命令画虚线
- 软件语音验证码webservice_明明发送了却迟迟收不到短信验证码?
- 02-JVM堆里面的分区:Eden,survival (from+ to),老年代,各自的特点?
- 2021年电工(技师)最新解析及电工(技师)复审考试
- 攻略-联想 Yoga 900 安装 Arch Linux 系统
- tensorflow 做多元线性回归时怎样对非数据型数据(分类型数据)进行处理(编码)
- 可恶啊,被他用责任链给装到了
- idea配置maven报错:org.codehaus.plexus.component.repository.exception.ComponentLookupException
- 陆军工程大学毕业论文Latex模板
- 【转贴】揭密SQL Server DATETIME数据类型
热门文章
- VSCode从下载到配置Ubuntu系统
- mysql中视图的概念_MySql中的视图的概念及应用
- ADC实验(读取引脚电压值)
- sql 写query_为什么需要动态SQL
- 通过远程(vnc)无法打开qtcreator
- python udp 大文件_Python:通过UDP发送大对象
- mysql函数lead用指定的字符串实现左填充指定长度
- 收集Redis16个最常见面试问题
- 【收集】常用的cmd命令
- java 判断域密码到期提醒,Exchange Server 2010下,检测用户密码到期通知提醒脚本...