HttpClient发送MultipartFile多文件及多参数请求

1、环境准备:

<dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.3</version></dependency>

2、Java中发送httpClient请求:

/*** HttpClient post multipart/form-data数据实现多文件上传* @param url* @param headers 头部参数* @param body body参数,json字符串* @param multipartFiles 文件列表* @param fileParName 接收的文件名* @return*/public static String sendFilePost(String url, Map<String, String> headers, String body,List<MultipartFile> multipartFiles,String fileParName) {CloseableHttpClient httpclient = HttpClients.createDefault();HttpPost httppost = new HttpPost(url);MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);builder.setCharset(java.nio.charset.Charset.forName("UTF-8"));//单个文件String fileName = null;MultipartFile multipartFile = null;for (int i = 0; i < multipartFiles.size(); i++) {//第一个参数为 相当于 Form表单提交的file框的name值 第二个参数就是我们要发送的InputStream对象了//第三个参数是文件名//3)multipartFile = multipartFiles.get(i);fileName = multipartFile.getOriginalFilename();InputStream inputStream = null;try {inputStream = multipartFile.getInputStream();} catch (IOException e) {e.printStackTrace();}builder.addBinaryBody(fileParName,inputStream, ContentType.MULTIPART_FORM_DATA, fileName);// 文件流}//4)构建请求参数 普通表单项/*	StringBody stringBody = new StringBody("12", ContentType.MULTIPART_FORM_DATA);builder.addPart("id", stringBody);*///决中文乱码ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, Consts.UTF_8);builder.addTextBody("paramStr", body, contentType);HttpEntity entity = builder.build();if (null!=headers&&headers.size()>0){for (Map.Entry<String, String> entry : headers.entrySet()) {httppost.addHeader(entry.getKey(),entry.getValue());}}httppost.setEntity(entity);CloseableHttpResponse response = null;try {response = httpclient.execute(httppost);} catch (IOException e) {logger.error("请求出错:" + url, e);return null;}String result = null;try {if(response!=null){HttpEntity httpEntity = response.getEntity();if (httpEntity != null && response.getStatusLine().getStatusCode()== HttpURLConnection.HTTP_OK) {// 判断请求状态result = EntityUtils.toString(httpEntity);}}} catch (Exception e) {logger.error("请求出错:" + url, e);} finally {try {if(response!=null){response.close();}} catch (IOException e) {logger.error("请求出错:" + url, e);}}logger.info("请求的URL:" + url + ", 返回结果:" + result);return result;}

3、后端服务restful接口接参:

    @Operation(summary = "获取附件")@PostMapping("/xxx")private void sendfilepost(@RequestParam(value = "file") List<MultipartFile> mulFiles,@RequestParam(value = "paramStr") String json){/**这里处理自己的逻辑*/}

4、模拟2中调用

/**将普通文件转成MultipartFile文件*/
public static MultipartFile getMultipartFile(File file) {FileItem item = new DiskFileItemFactory().createItem("file", MediaType.MULTIPART_FORM_DATA_VALUE, true, file.getName());try (InputStream input = new FileInputStream(file);OutputStream os = item.getOutputStream()) {// 流转移IOUtils.copy(input, os);} catch (Exception e) {throw new IllegalArgumentException("Invalid file: " + e, e);}return new CommonsMultipartFile(item);
}public static void main(String[] args) {String url = "请求的服务路径";File f = new File("D:\\test");File[] files = f.listFiles();List<MultipartFile> multiFiles = new ArrayList();for(File tempFile:files){MultipartFile cMultiFile = getMultipartFile(tempFile);multiFiles.add(cMultiFile);}String restr = sendFilePost(url, null, JSON.toJSONString(paramMap),multiFiles,"file");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 win11 系统下12代/13代英特尔大小核架构 CPU 的 VMware 优化:输入延迟、卡顿,大小核调度

关于 win11 系统下12代/13代英特尔大小核架构 CPU 的 VMware 优化&#xff1a;输入延迟、卡顿&#xff0c;大小核调度 一、前言二、VMware 的优化2.1 键鼠输入延迟问题的解决2.1.1 搜索内核隔离2.1.2 关闭内存完整性并重启2.1.3 搜索启用或关闭windows功能2.1.4 关闭 hyper-v 和…

Java中有接口了为什么还需要有抽象类,抽象类和普通类和接口,三者之间有什么区别和联系

在 Java 中&#xff0c;接口、抽象类和普通类都是不同的概念&#xff0c;各自有其特定的用途和特性。了解它们之间的区别和联系有助于更好地利用 Java 的面向对象编程特性。 接口&#xff08;Interface&#xff09; 定义: 接口是一种完全抽象的类&#xff0c;它允许声明方法但…

【23真题】难!下沙“小清华”难度爆增!

今天分享的是23年“下沙小清华”杭州电子科技大学843的信号与系统试题及解析。 本套试卷难度分析&#xff1a;22年杭电843考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取&#xff01;平均分为112分&#xff0c;最高分为145分&#xff01;该院校23…

Impala VS Hive

Impala和Hive的关系 Impala是基于Hive的大数据实时分析查询引擎&#xff0c;直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析&#xff0c;实现了Hive的SQL语义的子集&#xff0c;功能还在不断的完善中。 与Hive的…

如何用CHAT理解数理化?

问CHAT&#xff1a;扇形面积的概念&#xff0c;简单阐述一下。 CHAT回复&#xff1a; 扇形面积是指扇形这种二维几何图形所覆盖的区域大小。 扇形是一个圆的一部分&#xff0c;是由圆心出发的两条射线&#xff08;半径&#xff09;和这两条射线所夹角决定的圆周上的弧线所围成…

近期为何事故频发,企业安全生产如何保障?

近期&#xff0c;多地陆续发生了一系列企业安全生产事故&#xff0c;给企业和员工带来了严重的生命和财产损失&#xff0c;引发了社会各界对安全生产问题的广泛关注。安全生产是企业发展的重要保障&#xff0c;然而&#xff0c;企业在追求经济效益的过程中&#xff0c;往往忽视…

为虚幻引擎开发者准备的Unity指南

目录 1.前言2.编辑器2.1 Scene 视图&#xff08;视口&#xff09;2.2 Game 视图 (Play in Editor)2.3.Hierarchy 窗口 (World Outliner)2.4 Project 窗口(Content Browser)2.5 Inspector (Details)2.6 Console&#xff08;消息视图/输出日志&#xff09;2.7 Modes 面板在哪里&a…

​​​​​​​3分钟实现EG网关串口连接麦格米特PLC

EG网关串口连接麦格米特PLC 前言&#xff1a;麦格米特PLC广泛应于工业控制领域&#xff0c;是一款性能高、稳定性强的PLC设备。此文档将介绍如何使用EG系列网关通过串口连接麦格米特PLC&#xff0c;并添加到EMCP物联网云平台&#xff0c;实现电脑Web页面、手机APP和微信对麦格米…

【Rxjava详解】(一)观察者模式的拓展

文章目录 RxJava引入扩展的观察者模式RxJava的观察者模式基本实现 RxJava入门示例Action RxJava引入 在介绍RxJava之前先说一下Rx。全称是Reactive Extensions&#xff0c;直译过来就是响应式扩展 Rx基于观察者模式&#xff0c;它是一种编程模型&#xff0c;目标是提供一致的…

uniapp:如何实现点击图片可以全屏展示预览

这个需要使用uniapp中的api&#xff1a;uni.previewImage&#xff0c;使用方法如下 1、html <template><view><image src"图片路径" click"preview"></image></view> </template> 2、JavaScript <script> e…

pyhive的离线安装及使用示例

pyhive离线安装 pyhive下载离线安装包 下载方式一:直接把jieba包下载到/download/pip/目录下 pip download -d /download/pip/ pyhive[hive_pure_sasl]下载方式二:建一个requirement.txt文件里面一行一行写需要的包,/usr/local/download/pip/是下载目录 pip download -d /d…

怎么判断list是否为null

List<Entity> baseMess new ArrayList<>(); baseMess motiveService.getBaseMessage(machine.get(i),preDate,nowDate); System.out.println("获取Size"baseMess.size()); baseMess.removeIf(Objects::isNull); System.out.println("获取Size"…

Cannot read property ‘pickAlgorithm‘ of null

Cannot read property pickAlgorithm of null 报错显示 node 和 npm的版本号不对应 查看版本号 node -v npm -v node的版本对应 Previous Releases | Node.js (nodejs.org) 我们需要改成对应的mpm版本号 npm install npm6.14.12 -g nodejs与npm版本对应关系以及使用nvm管理n…

『亚马逊云科技产品测评』活动征文|利用EC2云服务器快速部署一个SpringBoot项目

&#xff08;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道&#xff09; 1. 前言 本文主要是对亚马逊云科技的EC2进行体…

前端字符串方法汇总

1、length属性 const sss lengthconsole.log(字符串长度是, sss.length) 2、chartAt() charAt()和charCodeAt()方法都可以通过索引来获取指定位置的值&#xff1a; charAt() 方法获取到的是指定位置的字符&#xff1b;charCodeAt()方法获取的是指定位置字符的Unicode值。 …

Java基于B/S架构,包括PC后台管理端、APP移动端、可视化数据大屏的智慧工地源码

智慧工地管理平台充分运用数字化技术&#xff0c;聚焦施工现场岗位一线&#xff0c;依托物联网、互联网、AI等技术&#xff0c;围绕施工现场管理的人、机、料、法、环五大维度&#xff0c;以及施工过程管理的进度、质量、安全三大体系为基础应用&#xff0c;实现全面高效的工程…

【算法-哈希表5】看似哈希,实则双指针。

今天&#xff0c;带来哈希表和双指针相关算法的讲解。文中不足错漏之处望请斧正&#xff01; 理论基础点这里 四数之和 题意简化 四数之和&#xff0c;去重版&#xff1a;找不重复的四元组 四元组四个元素下标不同, 和为target四元组不重复 由于输出四元组的顺序没有限制, …

MySQL之BETWEEN AND包含范围查询总结

一、时间范围 查询参数格式与数据库类型相对应时&#xff0c;between and包含头尾&#xff0c;否则依情况 当数据库字段中存储的是yyyy-MM-dd格式&#xff0c;即date类型&#xff1a; 用between and查询&#xff0c; 参数yyyy-MM-dd格式时&#xff0c;包含头尾&#xff0c;相当…

Java虚拟机(JVM)的调优技巧和实战2

JVM是Java应用程序的运行环境&#xff0c;它负责管理Java应用程序的内存分配、垃圾收集等重要任务。在JVM的默认设置下&#xff0c;可能存在一些性能问题&#xff0c;因此需要进行调优。在本次分享中&#xff0c;作者将介绍一些实用的JVM实战调优技巧&#xff0c;以提高Java应用…