httpclient 单附件上传实例  (扩展多附件上传实例,点我

    /**
* 上传附件
* @param host
* @param uri
* @param filePath 文件路径
* @param name 服务端定义的附件名
* @param param 请求带的参数
* @return
*/
public String upload(String host, String uri, String filePath,String name, Map<String, String> param) {
logger.info("*****************request*****************");
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
String url = host + uri ;
String rst = "";
try {
httpClient = HttpClients.createDefault();
logger.info("请求路径: "+ url);
HttpPost httpPost = new HttpPost(url);
   //通过当前类的加载器来加载资源,调用getResourceAsStream()是保证和类类型同一个加载器加载
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filePath); //获取resources下的资源文件
File file = new File(filePath);
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); //创建MultipartEntityBuilder对象
        //添加上传的二进制文件
builder.addBinaryBody(name, inputStream, ContentType.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();
}
}
} 

 调用方法

    /**
  * @description: TODO 上传图片
  * @author : xxx
  * @date 2019/6/6 11:15
  */
public String uploadImage() throws Exception {
Map<String, String> params = new HashMap<>();
params.put("uploadType","1");
//文件放置resources目录下, 服务端定义接收附件名称为 imageFile
String rst = upload("http://xxxx.com","/web/upload","picture/repaymentPic.jpg","imageFile",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. spring MVC上传附件

    spring mvc为我们封装了十分简单的上传附件的方法,以下通过一个例子学习. 1.jsp <%@ page language="java" contentType=&qu ...

  2. file 自定义上传附件并展示缩略图

    效果图镇楼..   写的有点乱.上传一个实例供大家参考--附件下载地址如何下: https://files.cnblogs.com/files/fchx91/uploadFiles.rar 2019- ...

  3. HTTP的上传文件实例分析

    这个是http文件传输的一种格式,当时不知道这种格式,废弃. HTTP的上传文件实例分析 由于论坛不支持Word写文章发帖. 首先就是附件发送怎么搞,这个必须解决.论坛是php的.我用Chrome类浏 ...

  4. React项目中使用wangeditor以及扩展上传附件菜单

    在最近的工作中需要用到富文本编辑器,结合项目的UI样式以及业务需求,选择了wangEditor.另外在使用的过程中发现wangEditor只有上传图片和视频的功能,没有上传文本附件的功能,所以需要对其 ...

  5. wordpress多站点环境设置上传附件大小

    多站点环境更改上传附件大小: php.ini post_max_size = 8M upload_max_filesize = 10M 另外,后台域名管理中设置/网络设置/可以设置上传文件大小. 代码 ...

  6. jquery 通过ajax FormData 对象上传附件

    之前上传附件都是用插件,或者用form表单体检(这个是很久以前的方式了),今天突发奇想,自己来实现附件上传,具体实现如下 html: <div>   流程图: <input id=& ...

  7. Discuz! X论坛上传附件到100%自动取消上传的原因及解决方案

    最近接到一些站长的反馈,说论坛上传附件,到100%的时候自己取消上传了.经查是附件索引表pre_forum_attachment表的aid字段自增值出现了问题,导致程序逻辑返回的aid值实际为一个My ...

  8. Discuz模拟批量上传附件发帖

    简介 对于很多用discuz做资源下载站来说,一个个上传附件,发帖是很繁琐的过程.如果需要批量上传附件发帖,就需要去模拟discuz 上传附件的流程. 模拟上传 discuz 附件逻辑 dz附件储存在 ...

  9. 修改WordPress中上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法

    在服务器上架设好WordPress后,使用过程中发现,上传附件大小有2M的限制 话说服务器就是本机,可以直接把文件拖到附件存储文件夹下,然后在需要附件的地方引用链接 可是这种落后的方法终究不是办法,还 ...

随机推荐

  1. Web前端性能优化-重绘与回流

    1.什么是重绘与回流 Render tree 的重新构建就叫回流.当布局和几何属性改变时就需要回流,鼠标移动到图片 图片变大 也会触发回流.回流 能避免就避免 Render tree 改变外观.风格 ...

  2. 数据分析 - Excel 函数, 技巧, 分析工具

    数据分析工具使用场景 函数 分类 文本清洗函数 FIND - 查找 find 函数查询指定位置的某字符的的位置 快捷键 : 选中后双击右下角的 + 可以快速生成当前一列结果 FIND("查询 ...

  3. Git 解决冲突(3步)

    今天新人从master分支合并到自己开发分支时有冲突了,不知道怎么解决,给他解决后,顺便简单记下,免得其他人问时还要再讲一遍 1.先切到自己的分支,拉下代码 git pull 2.向某个分支发起合并 ...

  4. 2.使用kubeadm快速搭建k8s集群

    准备工作: 时间同步 systemctl stop iptables.servicesystemctl stop firewalld.service 安装docker wget https://mir ...

  5. NginxURL重新配置

    server { listen 8080; server_name localhost; rewrite /ljys/kcf(.*) http://192.168.4.139:8080/wuxi-pr ...

  6. Selenium 2自动化测试实战37(自动发邮件功能)

    自动发邮件功能 例如,如果想在自动化脚本运行完成之后,邮箱就可以收到最新的测试报告结果.SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到 ...

  7. dataset的find查找功能使用

    var record = dataset.find(["status"],[curstatus]); //status指的是dataset中的某个字段,curstatus指的是指定 ...

  8. java内存模型的原子性、可见性、有序性与指令重排序

    在并发编程中,我们通常会遇到以下三个概念:原子性.可见性和有序性.我们先看具体看一下这三个概念: 1.原子性 操作时不可分割的比如a=0,此操作不可分割,而++a,实际上是a=a+1,为两个操作.想将 ...

  9. AP注册

    1.ac发现ap 两种模式:二层发现.三层发现 按ap与ac所处ip网段不同,可以把注册过程分为二层模式和三层模式: 两种模式均通过发送discovery报文进行,二层模式discovery报文仅在同 ...

  10. 论文阅读 | Text Processing Like Humans Do: Visually Attacking and Shielding NLP Systems

    [code&data] [pdf] 主要工作 文章首先证明了对抗攻击对NLP系统的影响力,然后提出了三种屏蔽方法: visual character embeddings adversaria ...