首页 技术 正文
技术 2022年11月18日
0 收藏 488 点赞 2,889 浏览 4055 个字

多附件上传实例:

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,474
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,889
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,724
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,479
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,118
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,278