HttpClient上传文件传入MultipartFile类型

2023-12-13 12:38

本文主要是介绍HttpClient上传文件传入MultipartFile类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

httpClient post方式上传MultipartFile文件

注意:builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流

第一个参数:"file" 表现需要调用的上传文件接口 文件名

返回 ”Required request part 'file' is not present” 错误时,就是因为该名称 和调用的 url中文件名称不一样

第二个参数:传入文件流

第三个参数:文件类型

第四个参数:上传文件的名称

/*** post请求接口* @param url* @param imageUploadFileName* @param file* @param headerParams* @param otherParams* @return*/public static String postResultMultipartFile(String url,String imageUploadFileName,MultipartFile file,Map<String,String> headerParams, Map<String,String> otherParams) {CloseableHttpClient httpClient = HttpClients.createDefault();String result = "";HttpEntity httpEntity = null;HttpEntity responseEntity = null;try {String fileName = file.getOriginalFilename();HttpPost httpPost = new HttpPost(url);//添加header
//            for (Map.Entry<String, String> e : headerParams.entrySet()) {
//                httpPost.addHeader(e.getKey(), e.getValue());
//            }MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.setCharset(Charset.forName("utf-8"));builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//加上此行代码解决返回中文乱码问题builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
//            for (Map.Entry<String, String> e : otherParams.entrySet()) {
//                builder.addTextBody(e.getKey(), e.getValue());// 类似浏览器表单提交,对应input的name和value
//            }httpEntity = builder.build();httpPost.setEntity(httpEntity);HttpResponse response = httpClient.execute(httpPost);// 执行提交responseEntity = response.getEntity();if (responseEntity != null) {// 将响应内容转换为字符串result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));}} catch (IOException e) {log.info("------------------{}",e.getMessage());e.printStackTrace();}catch (Exception e) {log.info("------------------{}",e.getMessage());e.printStackTrace();}  finally {printLog(url, HttpMethod.POST, httpEntity, null, responseEntity);}return result;}

控制器端代码

@ApiOperation(value = "通过http调用***文件接口 上传图片到***IDC服务器")@PostMapping(value = "/upload")public BizBaseResponse<String> upload(@RequestParam("file") MultipartFile file, String dir) {String upload = null;try {upload = openApiShopFileService.upload(file,dir, true);} catch (BizException e) {log.error("通过http调用***文件接口 上传图片到***IDC服务器 异常(/openapi/shop/addShopInfoToThShop)", e);return addError(BizErrorCodeEnum.OPERATION_FAILED, e.getErrorMessage());} catch (Exception e) {log.error("通过http调用***文件接口 上传图片到***IDC服务器 异常(/openapi/shop/addShopInfoToThShop)", e);return addError(BizErrorCodeEnum.OPERATION_FAILED, "上传文件失败");}return new BizBaseResponse(upload);}

 

postman调用测试:

这篇关于HttpClient上传文件传入MultipartFile类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

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

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

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

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

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

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

C#之枚举类型与随机数详解

《C#之枚举类型与随机数详解》文章讲解了枚举类型的定义与使用方法,包括在main外部声明枚举,用于表示游戏状态和周几状态,枚举值默认从0开始递增,也可手动设置初始值以生成随机数... 目录枚举类型1.定义枚举类型(main外)2.使用生成随机数总结枚举类型1.定义枚举类型(main外)enum 类型名字