httpclient 上传附件实例
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 上传附件实例的更多相关文章
- spring MVC上传附件
spring mvc为我们封装了十分简单的上传附件的方法,以下通过一个例子学习. 1.jsp <%@ page language="java" contentType=&qu ...
- file 自定义上传附件并展示缩略图
效果图镇楼.. 写的有点乱.上传一个实例供大家参考--附件下载地址如何下: https://files.cnblogs.com/files/fchx91/uploadFiles.rar 2019- ...
- HTTP的上传文件实例分析
这个是http文件传输的一种格式,当时不知道这种格式,废弃. HTTP的上传文件实例分析 由于论坛不支持Word写文章发帖. 首先就是附件发送怎么搞,这个必须解决.论坛是php的.我用Chrome类浏 ...
- React项目中使用wangeditor以及扩展上传附件菜单
在最近的工作中需要用到富文本编辑器,结合项目的UI样式以及业务需求,选择了wangEditor.另外在使用的过程中发现wangEditor只有上传图片和视频的功能,没有上传文本附件的功能,所以需要对其 ...
- wordpress多站点环境设置上传附件大小
多站点环境更改上传附件大小: php.ini post_max_size = 8M upload_max_filesize = 10M 另外,后台域名管理中设置/网络设置/可以设置上传文件大小. 代码 ...
- jquery 通过ajax FormData 对象上传附件
之前上传附件都是用插件,或者用form表单体检(这个是很久以前的方式了),今天突发奇想,自己来实现附件上传,具体实现如下 html: <div> 流程图: <input id=& ...
- Discuz! X论坛上传附件到100%自动取消上传的原因及解决方案
最近接到一些站长的反馈,说论坛上传附件,到100%的时候自己取消上传了.经查是附件索引表pre_forum_attachment表的aid字段自增值出现了问题,导致程序逻辑返回的aid值实际为一个My ...
- Discuz模拟批量上传附件发帖
简介 对于很多用discuz做资源下载站来说,一个个上传附件,发帖是很繁琐的过程.如果需要批量上传附件发帖,就需要去模拟discuz 上传附件的流程. 模拟上传 discuz 附件逻辑 dz附件储存在 ...
- 修改WordPress中上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法
在服务器上架设好WordPress后,使用过程中发现,上传附件大小有2M的限制 话说服务器就是本机,可以直接把文件拖到附件存储文件夹下,然后在需要附件的地方引用链接 可是这种落后的方法终究不是办法,还 ...
随机推荐
- LuceneUtil使用反射,封装通用的方法
package loaderman.util; import java.io.File; import java.lang.reflect.Method; import loaderman.entit ...
- springboot2.0+redis实现消息队列+redis做缓存+mysql
本博客仅供参考,本人实现没有问题. 1.环境 先安装redis.mysql 2.springboot2.0的项目搭建(请自行完成),本人是maven项目,因此只需配置,获取相应的jar包,配置贴出. ...
- 数据中心网络架构的问题与演进 — NFV
目录 文章目录 目录 前文列表 前言 NFV NFV 的最终目标 NFV 的抽象框架 基础架构层与虚拟基础设施管理层 资源管理与业务流程编排层 OSS 层 SDN 控制层 NFV 的生态合作 NFV ...
- 基于spring reactor3构建的即时通讯api。
欢迎阅读Rmessage文档 技术栈 Rmessage是采用Reactor3,基于reactor-netty项目构建的实时消息推送api. 什么是Reactor3? Reactor 是一个用于JVM的 ...
- Swift3.0项目学习: 创建撰写按钮
import UIKit class PSMainViewController: UITabBarController { override func viewDidLoad() { super.vi ...
- docker搭建pxc
1.下载镜像 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.i ...
- 2019-2020 ICPC, Asia Jakarta Regional Contest H. Twin Buildings
As you might already know, space has always been a problem in ICPC Jakarta. To cope with this, ICPC ...
- English 邮件
1.email http://www2.elc.polyu.edu.hk/cill/eiw/e-mail.htm
- 第二次Java实验报告
Java实验报告 班级 计科二班 学号 20188437 姓名 何磊 完成时间 2019/9/12 评分等级 实验二 Java简单类与对象 实验目的 掌握类的定义,熟悉属性.构造函数.方法的作用,掌握 ...
- MySQL慢查询—开启慢查询
###一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. ###二.参数说明 slow_query_log 慢查询开启状态 ...