多附件上传实例:

 /**
* 多附件上传
* @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()

httpclient 多附件上传的更多相关文章

  1. asp.net结合uploadify实现多附件上传

    1.说明 uploadify是一款优秀jQuery插件,主要功能是批量上传文件.大多数同学对多附件上传感到棘手,现将asp.net结合uploadfiy如何实现批量上传附件给大家讲解一下,有什么不对的 ...

  2. ueditor调用其中的附件上传功能

    ueditor实际上是集成了webuploader, 在做内容发布的时候想既有ueditor又有单独的附件上传按钮,这时再加载一个webuploader就显得过于臃肿了,单独利用ueditor的上传功 ...

  3. 基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用

    大概一年前,我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随笔<Web开发中的文件上传组件uploadify的使用>中可以看到,Asp.NET中 ...

  4. 百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程之更改图片和附件上传路径

    本文是接上一篇博客,如果有疑问请先阅读上一篇:百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程 默认UEditor上传图片的路径是,编辑器包目录里面的net目录下 下面就演示如 ...

  5. tp中附件上传文件,表单提交

    public function tianjia(){ $goods=D('Goods'); if(!empty($_POST)){ if($_FILES['f_goods_image']['error ...

  6. 使用plupload做一个类似qq邮箱附件上传的效果

    公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...

  7. Dynamic CRM 2013学习笔记(十三)附件上传 / 上传附件

    上传附件可能是CRM里比较常用的一个需求了,本文将介绍如何在CRM里实现附件的上传.显示及下载.包括以下几个步骤: 附件上传的web页面 附件显示及下载的附件实体 调用上传web页面的JS文件 实体上 ...

  8. playframework中多附件上传注意事项

    playframework中多附件上传注意事项 2013年09月24日 play 暂无评论 //play版本问题 经确认,1.0.3.2版本下控制器中方法参数  List<File> fi ...

  9. JS实现多附件上传(asp.net)

    前几天,用户提出一个需求-多附件上传,另外,每个上传文件要加一个别名,本人创新少,从网上收集了资料,稍微改写,满足了 客户的需求.在应用到程序之前,先做了个小测试,测试通过,小高兴,就记录下了这个小测 ...

随机推荐

  1. git send-email时报错:Client host rejected: cannot find your hostname 如何处理?

    1. 先找出ip对应的域名 dig +short -x <your ip> 2. 如果第1步没有输出,那么需要将hostname与ip绑定,如:hostname为jello,那么是往/et ...

  2. 6and7.Pod控制器应用进阶

    Pod控制器应用进阶:imagepullpolicy: 镜像获取策略 Always,Never,IfNoPresent 暴露端口: portslabels 标签可以后期添加修改. ========== ...

  3. java中字符串左右补齐【转】

    /** * 右左补齐 */ public static String padRight(String src, int len, char ch) { int diff = len - src.len ...

  4. springboot自定义filter获取spring容器bean对象

    今天在自己定义的filter中,想要直接注入spring容器的其它bean进行操作,发现不能正常的注入: 原因:web容器加载顺序导致, 加载顺序是listener——filter——servlet, ...

  5. IDEA结合GIT的使用

    一.本地安装GIT 下载: https://git-scm.com/downloads 安装 略 配置环境变量 在 “我的电脑 --> 属性 --> 高级系统设置 -- > 环境变量 ...

  6. Linux (Ubuntu)上面安装maven

    1 首先检查linux上是否有maven mvn -v 或者mvn -version 如果没有安装,提示如下: ubuntu@ip----:~$ mvn -v The program 'mvn' ca ...

  7. What happens when you type an URL in the browser and press enter?

    What happens when you type an URL in the browser and press enter? 1. You type maps.google.com into t ...

  8. C学习笔记-预备知识

    计算机结构组成 CPU(中央处理器)(控制器+运算器) 存储器(内存+外存) 输出设备 输入设备 计算机系统组成 硬件系统 主机 中央处理器 运算器 控制器 内存储器 只读存储器 随机存储器 外部设备 ...

  9. 20191204-使用nginx解决ajax测试调用接口跨域问题

    问题描述 之前要测试一个http的接口,在postman中测试成功,但使用ajax调用却跨域.于是通过使用ngin反向代理的方式来解决ajax调用跨域问题 测试页面的内容 <html> & ...

  10. MongoDB对数组元素及内嵌文档进行增删改查操作

    比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: {    "_id" : "195861",    &qu ...