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

2023-11-24 00:01

本文主要是介绍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多文件及多参数请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/420919

相关文章

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda