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 相关文章推荐
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
Sep 25 Java/Android
Java实现房屋出租系统详解
Oct 05 Java/Android
解析mybatis-plus中的resultMap简单使用
Nov 23 Java/Android
关于maven依赖 ${xxx.version}报错问题
Jan 18 Java/Android
Java实现给Word文件添加文字水印
Feb 15 Java/Android
Android Flutter实现图片滑动切换效果
Apr 07 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
JAVA springCloud项目搭建流程
May 11 Java/Android
spring IOC容器的Bean管理XML自动装配过程
May 30 Java/Android
SpringCloud超详细讲解Feign声明式服务调用
Jun 21 Java/Android
Spring Boot 的创建和运行示例代码详解
Jul 23 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获取一个字符串中间一部分字符的方法
2014/08/19 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
Python中的两个内置模块介绍
2015/04/05 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
Python内存管理实例分析
2019/07/10 Python
原生python实现knn分类算法
2019/10/24 Python
python标准库os库的函数介绍
2020/02/12 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
关键字final的用法
2013/10/02 面试题
自荐信结尾
2013/10/27 职场文书
公积金转移接收函
2014/01/11 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
消防演习通知
2015/04/25 职场文书
《灰雀》教学反思
2016/02/19 职场文书