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 Swing实现自助取款机系统
Jun 11 Java/Android
Java各种比较对象的方式的对比总结
Jun 20 Java/Android
SpringCloud的JPA连接PostgreSql的教程
Jun 26 Java/Android
java设计模式--七大原则详解
Jul 21 Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
maven依赖的version声明控制方式
Jan 18 Java/Android
SpringBoot整合minio快速入门教程(代码示例)
Apr 03 Java/Android
SpringCloud Function SpEL注入漏洞分析及环境搭建
Apr 08 Java/Android
springboot读取nacos配置文件
May 20 Java/Android
多线程Spring通过@Scheduled实现定时任务
May 25 Java/Android
SpringBoot详解自定义Stater的应用
Jul 15 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
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
js location.replace与location.reload的区别
2010/09/08 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
python计数排序和基数排序算法实例
2014/04/25 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
python实现图像识别功能
2018/01/29 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
实例详解Python模块decimal
2019/06/26 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
Python批量启动多线程代码实例
2020/02/18 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
PyTorch的torch.cat用法
2020/06/28 Python
python 两种方法删除空文件夹
2020/09/29 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
绘画设计学生的个人自我评价
2013/09/20 职场文书
大学生护理专业自荐信
2013/10/03 职场文书
医学院校毕业生自荐信范文
2014/01/01 职场文书
模具数控专业自荐信
2014/01/27 职场文书
同学会主持词
2014/03/18 职场文书
春节联欢会主持词
2014/03/24 职场文书
求职信格式范文
2015/03/19 职场文书
教师节主持词开场白
2015/05/29 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书