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");
}
相关文章:
HttpClient发送MultipartFile多文件及多参数请求
1、环境准备: <dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><dependency><groupId>org.apache.httpcomponent…...
TMUX设置鼠标滚轮滑动来浏览之前的前面内容
在Ubuntu上使用Tmux有时使用鼠标滚轮时,和平时使用终端的习惯不怎么一致,因此可以设置启用鼠标滚轮。 通过鼠标滚轮滑动来浏览之前的前面内容 具体方式: 1 按完前缀ctrlB后 2 再按冒号:(记得shift) 3 进入命令行模式(下方绿色栏变…...
「go查漏补缺」命名规则以及 GROM 结构体的应用
概述: 在学习GORM过程中,总是在调用结构体和文件导入这里出错,所以整理了以下文档用于梳理变量/结构体命名规则和import导入的知识点 一、变量/结构体命名规则 变量/结构体都遵守同样的命名规则:可见性由首字母大小写决定 大写…...
Django 集成 Celery 实现高效的异步任务处理
概要 在复杂的 Web 应用中,处理长时间运行的任务或定期任务是一项挑战。Django 作为一个强大的 Python Web 框架,可以通过集成 Celery 这一异步任务队列来优化这些任务的处理。Celery 不仅能提高应用性能,还能改善用户体验。本文将深入探讨如…...
Java之异常(上):基本异常体系
一、背景引入: Java中的异常是指:Java程序在运行时可能出现的错误或非正常情况。例如:在程序中试图打开一个根本不存在的文件,在程序中除0等。异常是否出现:通常取决于程序的输入、程序中对象的当前状态以及程序所处的…...
你的关联申请已发起,请等待企业微信的管理员确认你的申请
微信支付对接时,需要申请AppID,具体在下面的位置: 关联AppID,发起申请时,会提示这么一句话: 此时需要登录企业微信网页版,使用注册人的企业微信扫码登录进去,然后按照下面的步骤操作即可。 点击…...
.nvmrc 文件使用详解
文章目录 1. 前言2. .nvmrc 是什么3. 创建 .nvmrc 文件4. 使用 .nvmrc 文件5. 终端自动切换版本 1. 前言 当开发多个项目时,每个项目运行环境要求的 node 版本不一样,那么我们就需要给每个项目指定 node 版本,也就是通过终端执行 nvm install…...
深度学习之基于YoloV5抽烟检测系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YOLOv5(You Only Look Once)的抽烟检测系统可以用于实时检测图像或视频中是否存在抽烟行…...
解释器模式 (Interpreter Pattern)
定义 解释器模式(Interpreter Pattern)是一种行为型设计模式,用于定义一种语言的语法表示,并提供一个解释器来处理这种语法。这种模式用于实现语言解释器,通常用于专业领域或复杂文本处理中。在解释器模式中ÿ…...
【bug】uniapp的image组件渲染gif图,只有第一次点击的时候有动效,需要每次点击都有gif效果,已解决
前两天遇到的问题,暂时没有解决,就搁置了。 不解决又难受,还好今天解决了,记录下 需求: 两个gif图,分别代表点击之后的男生和女生,并且有两个静态的男生和女生图片 当男生静态图被点击的时候切…...
ubuntu编译sqlite3并使用
SQLite3是一种轻量级的关系型数据库管理系统,它是在C语言基础上实现的。SQLite3具有许多优点,例如: 1.灵活:它可以在多种操作系统上运行,并且可以将多个数据库文件合并成一个文件。 2.易于使用:SQLite3使用…...
【OpenCV+OCR】计算机视觉:识别图像验证码中指定颜色文字
文章目录 1. 写在前面2. 读取验证码图像3. 生成颜色掩码4. 生成黑白结果图5. OCR文字识别6. 测试结果 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【…...
【ROS 2 进阶-MoveIt!】MoveIt!中的关键节点
所有内容请查看:博客学习目录_Howe_xixi的博客-CSDN博客 原文档链接:Docs...
-bash: jps: command not found
背景 服务器的jdk通过yum 安装的,要用jps查询pid,提示找不到命令 yum install -y java-1.8.0-openjdk.x86_64 一、jps命令无法找到 [devhgh-tob-hsbc-dev-003 ~]$ jps -bash: jps: command not found 二、检查基础Java环境 [devhgh-tob-hsbc-dev-003 ~]…...
[CLickhouse] 学习小计
1.建表 正常按照如下语句进行建表,但会报错说缺少ORDER BY 或 PRIMARY KEY CREATE TABLE omds.a (x String COMMENT ,y String COMMENT ,z String ) ENGINE MergeTree(); 若我们仅需建一个没有主键的表,直接使用如下建表语句即可: CREATE…...
一款非常优秀的项目管理工具:进度猫(推荐)
在项目管理中,一个好的工具可以极大地提高效率。 进度猫是一款非常优秀的项目管理工具。它具有非常强大的功能,可以帮助团队更好地管理项目进度。 通过可视化的方式,将项目进度、任务分配、需求变更等全面呈现给团队成员,让团队…...
Bert学习笔记(简单入门版)
目 录 一、基础架构 二、输入部分 三、预训练:MLMNSP 3.1 MLM:掩码语言模型 3.1.1 mask模型缺点 3.1.2 mask的概率问题 3.1.3 mask代码实践 3.2 NSP 四、如何微调Bert 五、如何提升BERT下游任务表现 5.1 一般做法 5.2 如何在相同领域数据中进…...
信号功率放大器的工作原理和特点是什么
信号功率放大器是一种电子设备,用于将输入信号的功率进行放大,以达到所需的输出功率水平。它在各个领域中都有广泛的应用,包括音频放大器、射频放大器、激光功率放大器等。下面将详细介绍信号功率放大器的工作原理和特点。 工作原理ÿ…...
基于go标准分层架构项目设计实现
基于go标准分层架构项目设计实现 缘起 个人博客网址 最近主要看了两方面知识,一方面是技术相关的,如何设计一个比较好的后端架构项目代码;一方面是非技术相关的,如何写一篇好的技术文章,能够让他人读懂并有收获。因…...
原理Redis-IntSet
IntSet IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。 结构如下: typedef struct intset {uint32_t encoding; /* 编码方式,支持存放16位、32位、64位整数*/uint32_t length; /* 元素…...
利用taotoken多模型能力为ubuntu部署的智能客服系统选型
利用Taotoken多模型能力为Ubuntu部署的智能客服系统选型 1. 智能客服系统的模型选型挑战 在Ubuntu服务器上部署智能客服系统时,开发团队往往面临模型选择的两难困境。不同的大模型在理解能力、响应速度和成本消耗上存在差异,而直接对接多个厂商的API会…...
QT5升级QT6踩坑记:qmake构建QML项目,资源管理方式大变样(附完整配置流程)
QT5到QT6迁移实战:qmake构建QML项目的资源管理重构指南 当开发者将一个QT5的QML项目迁移到QT6环境时,最常遇到的"拦路虎"莫过于资源管理机制的变更。许多开发者反馈,原本在QT5下运行良好的项目,在QT6中突然出现图片无法…...
别再手动写动画了!Vue 3 + Lottie 实现炫酷交互动画(附免费资源站)
Vue 3与Lottie动画:高效开发者的视觉魔法工具箱 在当今快节奏的前端开发领域,视觉动效已成为提升用户体验的关键因素。然而,传统的手写CSS或JavaScript动画不仅耗时耗力,还常常面临浏览器兼容性和性能优化的挑战。这就是为什么越…...
SYN半连接堆积是什么?一文讲透TCP 建连排队、适用场景、与SYN Flood 的边界及排查标准
SYN 半连接堆积是什么?一文讲透 TCP 建连排队、适用场景、与 SYN Flood 的边界及排查标准 很多运维在现场会遇到一种很“邪门”的故障:服务器 CPU 不高、内存不满、带宽也没打满,但业务就是间歇性连不上,或者首包特别慢。抓包一看…...
从LeetCode LRU到CMU15-445 Project#1:手把手教你用C++实现LRU-K缓存替换策略
从LeetCode到数据库内核:LRU-K缓存替换策略的工程实现进阶 1. 缓存策略的演进与LRU-K的核心价值 在计算机科学领域,缓存系统如同人类记忆的延伸,而替换策略则是决定哪些记忆值得保留的关键机制。当我们从LeetCode的LRU算法练习(如…...
FreeRTOS Demo里的Check任务与流缓冲区:新手容易忽略的稳定性设计与优化技巧
FreeRTOS Demo里的Check任务与流缓冲区:新手容易忽略的稳定性设计与优化技巧 在嵌入式开发中,FreeRTOS作为一款轻量级实时操作系统,其官方Demo工程往往蕴含着许多值得深入挖掘的设计智慧。很多开发者在学习FreeRTOS时,会重点关注任…...
保姆级教程:手把手教你下载、解析与使用EuRoC MAV数据集(含ROS bag处理避坑指南)
保姆级教程:手把手教你下载、解析与使用EuRoC MAV数据集(含ROS bag处理避坑指南) 当你第一次接触视觉SLAM或机器人感知领域时,面对琳琅满目的数据集往往会感到无从下手。EuRoC MAV数据集作为视觉惯性SLAM研究的黄金标准之一&…...
Sunshine游戏串流方案:打造你的专属云游戏服务器终极指南
Sunshine游戏串流方案:打造你的专属云游戏服务器终极指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾梦想过在轻薄笔记本上流畅运行3A大作?或者…...
三步搞定米哈游游戏登录:MHY_Scanner全自动扫码工具深度解析
三步搞定米哈游游戏登录:MHY_Scanner全自动扫码工具深度解析 【免费下载链接】MHY_Scanner MHY扫码登录器,支持从直播流抢码。 项目地址: https://gitcode.com/gh_mirrors/mh/MHY_Scanner 你是否也曾为米哈游游戏的登录流程感到烦恼?在…...
Microchip PIC64GX:64位RISC-V多核微处理器解析与应用
1. Microchip PIC64GX:首款64位RISC-V多核微处理器深度解析当Microchip宣布推出PIC64GX系列时,整个嵌入式行业都为之一振。作为Microchip首款64位RISC-V架构的微处理器,PIC64GX不仅填补了该公司在高性能RISC-V处理器领域的空白,更…...
