通常我们在使用httpclient的时候,一把都是使用get或者postd的方式传输一些数据。在近期的项目中有这样的一个需求,我需要通过httpclient去调用一个写好的文件上传的接口,接口中是使用MultipartFile 来接受文件类型参数的。在这种情况下我们就开辟一个HttpClient中的高级功能了。直接上代码,封装了一个工具类:

 /*** 使用httpclint 发送文件* @author: qingfeng* @date: 2019-05-27* @param file*            上传的文件* @return 响应结果*/public static String uploadFile(String url ,MultipartFile file,String fileParamName,Map<String,String>headerParams,Map<String,String>otherParams) {CloseableHttpClient httpClient = HttpClients.createDefault();String result = "";try {String fileName = file.getOriginalFilename();HttpPost httpPost = new HttpPost(url);//添加headerfor (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(fileParamName, 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 entity = builder.build();httpPost.setEntity(entity);HttpResponse response = httpClient.execute(httpPost);// 执行提交HttpEntity responseEntity = response.getEntity();if (responseEntity != null) {// 将响应内容转换为字符串result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));}} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {try {httpClient.close();} catch (IOException e) {e.printStackTrace();}}return result;}

要注意,这种情况下,一旦对方返回的结果中存在中文有可能出现乱码,解决方法就是向上面的代码中加入:

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//加上此行代码解决返回中文乱码问题、

解决浏览器兼容问题。 这样就可以顺利得到返回值了

调用案例:

 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;List<MultipartFile> files = multipartRequest.getFiles("repayFile");//从request中获取前端穿过来的文件//调用httpclientString res = HttpUtil.uploadFile("localhost:8080/upload", files.get(0), "repayFile", headers, paramMap);

上传文件的接口:

@RequestMapping(value = "/upload", method = {RequestMethod.POST })public void fileBatchRepay(@RequestParam(value = "repayFile") MultipartFile repayFile,@RequestParam(value = "type") String type) {Map<String, Object> result = new HashMap<String, Object>();List<List<String>> list=new ArrayList<List<String>>();try {list = borrowRepayService.fileBatchRepay(repayFile,type);String title = "exel模板demo";RepayExcelModel report = new RepayExcelModel();String fileName = report.saveExcelByList(list, title, repayFile.getOriginalFilename(),request);result.put(Constant.RESPONSE_DATA, "/down.htm?path="+fileName);result.put(Constant.RESPONSE_CODE, Constant.SUCCEED_CODE_VALUE);result.put(Constant.RESPONSE_CODE_MSG, "获取成功");} catch (BussinessException e) {logger.error(e.getMessage(),e);result.put(Constant.RESPONSE_CODE, Constant.FAIL_CODE_VALUE);result.put(Constant.RESPONSE_CODE_MSG, e.getMessage());} catch (Exception e) {logger.error(e.getMessage(),e);result.put(Constant.RESPONSE_CODE, Constant.FAIL_CODE_VALUE);result.put(Constant.RESPONSE_CODE_MSG, "失败");}ServletUtils.writeToResponse(response, result);}

好了,就分享到这里,希望对大家有帮助

想学java的同学,也可以看我的java基础教学视频https://www.bilibili.com/video/av37413483?from=search&seid=16996396768466285203,免费学习

HttpClient上传文件传入MultipartFile类型相关推荐

  1. springBoot上传文件时MultipartFile报空问题解决方法

    springBoot上传文件时MultipartFile报空问题解决方法 参考文章: (1)springBoot上传文件时MultipartFile报空问题解决方法 (2)https://www.cn ...

  2. C# 使用HttpClient上传文件并附带其他参数的步骤

    HttpClient和MultipartFormDataContent(传送门)最低适用于.NET Framework 4.5版本 发送端代码 using (HttpClient client = n ...

  3. [转]httpclient 上传文件、下载文件

    用httpclient4.3 post方式推送文件到服务端 准备:httpclient-4.3.3.jar:httpcore-4.3.2.jar:httpmime-4.3.3.jar/*** 上传文件 ...

  4. Java如何判断一个上传文件的内容类型

    关于如何判断一个文件的类型,在如何判断一个文件的类型_jimmyleeee的博客-CSDN博客已经介绍了,但是在实际运用于真正的文件上传时,还是有些注意事项需要注意的. 在进入主题之前,首先需要简单介 ...

  5. SMW0 HTML模版的形式上传文件 维护MIME类型

    使用SMW0事务代码为webrfc上传模版, 若是已HTML模版形式上传的话,所上传的文件类型必须在MIMETYPES表中有对应的MIMETYPES,如果没有对应的,则应该维护进去,否则不允许以HTM ...

  6. 亿速云服务器 如何上传文件,使用MultipartFile怎么实现一个文件上传功能

    使用MultipartFile怎么实现一个文件上传功能 发布时间:2021-01-20 16:43:15 来源:亿速云 阅读:139 作者:Leah 使用MultipartFile怎么实现一个文件上传 ...

  7. C# HttpClient上传文件并附带其它参数

    1.Fiddler抓包参数详情 Content-Type: multipart/form-data; boundary="8d9ade1fd906a6a" Content-Leng ...

  8. Spring boot 上传文件时 MultipartFile 报空指针

    //直接上代码,这是一开始写的一个简单的 单文件上传 然后死活不好用 一直报500 走了断点跟了一下 看到multipartFile 是个null 有点疑惑 SimpleDateFormat sdf ...

  9. HttpClient上传文件到微信素材乱码问题解决

    在开发微信第三方公众平台的时候,需要上传图片.语音等文件到微信服务器.当文件名存在中文时会出现乱码.网上搜了一大堆文章,大部讲什么设置编码啥的,放到微信素材上传这个场景就是用不了,试了各种方式,依然是 ...

最新文章

  1. 详解Silverlight Treeview的HierarchicalDataTemplate使用
  2. Shell脚本逐行处理文本文件技巧
  3. 八个层面比较 Java 8, RxJava, Reactor
  4. [MySQL] 几句MySQL时间筛选SQL语句[进入查看]
  5. linux emule 编译 wx-config --libs,linux下编译wxwidgets所写程序所遇到的问题
  6. 【Python-ML】SKlearn库Pipeline工作流和K折交叉验证
  7. 【OpenCV 例程200篇】56. 低通盒式滤波器
  8. phpadmin 安装
  9. 算法7-9:有向图搜索算法
  10. 自动控制——2、为什么用微分方程来表示线性定常系统
  11. 网络服务器ssh、ftp、telnet、samba配置总结
  12. Java实现在线打开word文档加盖印章/盖章/签名功能
  13. ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据
  14. matlab仿真三相变压器,三相变压器励磁涌流的MATLAB仿真与分析
  15. 信号带宽和示波器带宽(模拟带宽)关系?信号带宽和信道带宽关系?示波器参数、品牌
  16. 软件构造笔记---Java的多态性
  17. php安装时候的源是什么,Windows安装源无效怎么办
  18. 介词短语不能做宾语,但有时有的借此有句意省略就出现了介词再加上介词短语了
  19. [C语言]逆序一个字符串的内容
  20. 华为硬件工程师手册_华为,英飞凌,中兴硬件工程师面试题

热门文章

  1. 用HALL 库配置GPIO以及相关寄存器
  2. 梦幻西游109散人最多的服务器,老鸡解读真实的梦幻 最高在线保守80W!
  3. 高通芯片GPU是否有类似于HSR功能
  4. 吕梁市服务器维修,终端服务器 吕梁知名智能车检网络摄像机 电话交通技术监控机柜...
  5. 《简约至上》读书笔记
  6. 冷冻电镜聚类中心(2D Class)粒子图像的解析
  7. 如何删除iso镜像文件?
  8. java学习笔记 java编程思想 第7章 复用类
  9. 更改SQL Server数据库名、数据库文件名的方法
  10. UI设计中的App标签栏中的设计细节