HttpClient实现表单提交上传文件


Posted in Java/Android onAugust 14, 2022

本文实例为大家分享了HttpClient实现表单提交上传文件的具体代码,供大家参考,具体内容如下

需求:如何利用HttpClient,发起post请求,模拟表单提交,在后端上传文件?

上传文件接口:

/**
     * 文件上传测试接口
     * @return
     */
    @PostMapping("/upload")
    public Object uploadFileTest(@RequestParam("file") MultipartFile file, @RequestParam("file_name") String file_name, @RequestParam("file_code") String file_code) {
        System.out.println(file_name+","+file_code);
        return "OK";
    }

启动后,可以通过postman进行调用,最后打印OK,表示接口可以调用通

HttpClient实现表单提交上传文件

然后就是正式编码环节了

首先引入需要的包:

<dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpmime</artifactId>
   <version>4.5.3</version>
</dependency>

 编写main方法,直接发起调用

 public static String httpClientUploadFile(String url, File file) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        //每个post参数之间的分隔。随意设定,只要不会和其他的字符串重复即可。
        String boundary = "--------------4585696313564699";
        try {
            //文件名
            String fileName = file.getName();
            HttpPost httpPost = new HttpPost(url);
            //设置请求头
            httpPost.setHeader("Content-Type", "multipart/form-data; boundary="+boundary);
 
            //HttpEntity builder
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            //字符编码
            builder.setCharset(Charset.forName("UTF-8"));
            //模拟浏览器
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            builder.setContentType(ContentType.MULTIPART_FORM_DATA);
            //boundary
            builder.setBoundary(boundary);
            //multipart/form-data
            builder.addPart("file", new FileBody(file, ContentType.DEFAULT_BINARY));
            // binary
            //builder.addBinaryBody("name=\"file\"; filename=\"mysql.docx\"", new FileInputStream(file), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
            //其他参数
            //builder.addTextBody("file_name", fileName, ContentType.create("text/plain", Consts.UTF_8));
            builder.addTextBody("file_name", fileName, ContentType.MULTIPART_FORM_DATA);
            builder.addTextBody("file_code", "111111", ContentType.MULTIPART_FORM_DATA);
            //HttpEntity
            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();
            }
        }
        System.out.println("result" + result);
        return result;
    }
 
    //main 方法
    public static void main(String[] args) {
        httpClientUploadFile("http://127.0.0.1:8080/test/tempA/upload",new File("e:/tmp/mysql.docx"));
    }

最后返回OK,调用成功

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java 将PPT幻灯片转为HTML文件的实现思路
Jun 11 Java/Android
Java Shutdown Hook场景使用及源码分析
Jun 15 Java/Android
Java并发编程之详解CyclicBarrier线程同步
Jun 23 Java/Android
浅谈Python魔法方法
Jun 28 Java/Android
springboot中rabbitmq实现消息可靠性机制详解
Sep 25 Java/Android
java协程框架quasar和kotlin中的协程对比分析
Feb 24 Java/Android
java objectUtils 使用可能会出现的问题
Feb 28 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
Mar 22 Java/Android
SpringBoot整合minio快速入门教程(代码示例)
Apr 03 Java/Android
springboot入门 之profile设置方式
Apr 04 Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 Java/Android
HttpClient实现文件上传功能
Aug 14 #Java/Android
SpringBoot Http远程调用的方法
Aug 14 #Java/Android
基于Android10渲染Surface的创建过程
Aug 14 #Java/Android
OpenFeign实现远程调用
Aug 14 #Java/Android
httpclient调用远程接口的方法
Aug 14 #Java/Android
Java Spring读取和存储详细操作
Aug 05 #Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
Aug 05 #Java/Android
You might like
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
详解php中的implements 使用
2017/06/13 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
使用python进行波形及频谱绘制的方法
2019/06/17 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
会计工作心得体会
2014/01/13 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
规范化管理年活动总结
2014/08/29 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
在校生证明
2015/06/17 职场文书
python实现会员管理系统
2022/03/18 Python
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers