HttpClient上传文件传入MultipartFile类型
通常我们在使用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类型相关推荐
- springBoot上传文件时MultipartFile报空问题解决方法
springBoot上传文件时MultipartFile报空问题解决方法 参考文章: (1)springBoot上传文件时MultipartFile报空问题解决方法 (2)https://www.cn ...
- C# 使用HttpClient上传文件并附带其他参数的步骤
HttpClient和MultipartFormDataContent(传送门)最低适用于.NET Framework 4.5版本 发送端代码 using (HttpClient client = n ...
- [转]httpclient 上传文件、下载文件
用httpclient4.3 post方式推送文件到服务端 准备:httpclient-4.3.3.jar:httpcore-4.3.2.jar:httpmime-4.3.3.jar/*** 上传文件 ...
- Java如何判断一个上传文件的内容类型
关于如何判断一个文件的类型,在如何判断一个文件的类型_jimmyleeee的博客-CSDN博客已经介绍了,但是在实际运用于真正的文件上传时,还是有些注意事项需要注意的. 在进入主题之前,首先需要简单介 ...
- SMW0 HTML模版的形式上传文件 维护MIME类型
使用SMW0事务代码为webrfc上传模版, 若是已HTML模版形式上传的话,所上传的文件类型必须在MIMETYPES表中有对应的MIMETYPES,如果没有对应的,则应该维护进去,否则不允许以HTM ...
- 亿速云服务器 如何上传文件,使用MultipartFile怎么实现一个文件上传功能
使用MultipartFile怎么实现一个文件上传功能 发布时间:2021-01-20 16:43:15 来源:亿速云 阅读:139 作者:Leah 使用MultipartFile怎么实现一个文件上传 ...
- C# HttpClient上传文件并附带其它参数
1.Fiddler抓包参数详情 Content-Type: multipart/form-data; boundary="8d9ade1fd906a6a" Content-Leng ...
- Spring boot 上传文件时 MultipartFile 报空指针
//直接上代码,这是一开始写的一个简单的 单文件上传 然后死活不好用 一直报500 走了断点跟了一下 看到multipartFile 是个null 有点疑惑 SimpleDateFormat sdf ...
- HttpClient上传文件到微信素材乱码问题解决
在开发微信第三方公众平台的时候,需要上传图片.语音等文件到微信服务器.当文件名存在中文时会出现乱码.网上搜了一大堆文章,大部讲什么设置编码啥的,放到微信素材上传这个场景就是用不了,试了各种方式,依然是 ...
最新文章
- 详解Silverlight Treeview的HierarchicalDataTemplate使用
- Shell脚本逐行处理文本文件技巧
- 八个层面比较 Java 8, RxJava, Reactor
- [MySQL] 几句MySQL时间筛选SQL语句[进入查看]
- linux emule 编译 wx-config --libs,linux下编译wxwidgets所写程序所遇到的问题
- 【Python-ML】SKlearn库Pipeline工作流和K折交叉验证
- 【OpenCV 例程200篇】56. 低通盒式滤波器
- phpadmin 安装
- 算法7-9:有向图搜索算法
- 自动控制——2、为什么用微分方程来表示线性定常系统
- 网络服务器ssh、ftp、telnet、samba配置总结
- Java实现在线打开word文档加盖印章/盖章/签名功能
- ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据
- matlab仿真三相变压器,三相变压器励磁涌流的MATLAB仿真与分析
- 信号带宽和示波器带宽(模拟带宽)关系?信号带宽和信道带宽关系?示波器参数、品牌
- 软件构造笔记---Java的多态性
- php安装时候的源是什么,Windows安装源无效怎么办
- 介词短语不能做宾语,但有时有的借此有句意省略就出现了介词再加上介词短语了
- [C语言]逆序一个字符串的内容
- 华为硬件工程师手册_华为,英飞凌,中兴硬件工程师面试题